Wpis z mikrobloga

#programowanie #java #spring #angularjs

Mirki potrzebuje pomocy a mianowicie chodzi mi jak zparsować jsona do obiektu z adnotacji @ManyToOne. Nawet nie wiem jak to określić ale do rzeczy:

Mam klasę ProductionOrder w której mam Adnotacje @ManyToOne do klasy Item - proste
https://gist.github.com/anonymous/46e62e55c87f72424a0728cf865bcb8e

No i mam jeszcze angularowy service z $http https://gist.github.com/anonymous/75abd43e12bb3efbf5950ab73f51c5b9
Oraz angularowy controler https://gist.github.com/anonymous/ee36d253a9f9b80b1eba7e8a0bc16872
Które odwołują się do moich endpointów w springu https://gist.github.com/anonymous/3a84215bc3492bfcb59de08674e06058

No i mam prostą forme w htmlu, która służy mi do dodania nowego ProdcutionOrder
https://gist.github.com/anonymous/5c66c9d53682a9bf83ea1fd70a078f78

Wszystko ładnie smiga poza tym, że nie przenosi się informacja o itemie. Co bym nie wpisał, czego bym nie zmienił to nie mogę tego przeskoczyć bo zawsze wpisuje null. Przykładowy JSON

description: ""
id: null
item: "2"
plannedDate: "2016-01-01"
plannedQty: "2"
status: "CREATED"

Natomiast w IntelliIdea dostaje taki komunikat:

2016-06-15 21:09:33.264 WARN 4497 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unresolved forward references for: Object id [2] (for com.prod.domain.Item) at [Source: java.io.PushbackInputStream@3f814a5d; line: 1, column: 41].; nested exception is com.fasterxml.jackson.databind.deser.UnresolvedForwardReference: Unresolved forward references for: Object id [2] (for com.prod.domain.Item) at [Source: java.io.PushbackInputStream@3f814a5d; line: 1, column: 41].
Poradzicie coś bo szukam i szukam i coś słabo szukam. Może jakoś inaczej to ugryźć :)?
  • 9
@Acrene: Masz w logu. "Fail to read HTTP message" - parser nie potrafi odczytać strony, bo dostaje "Unresolved forward references" dla obiektu o id 2, typu Item. Wysyłasz Item, odbierasz (z kontrolera) ProductionOrder.
@Acrene: Pokazujesz "ProductionOrder" jako kontroler odbierania danych o Itemie, więc rozumiem, że serwis kieruje się pod dany adres.

Metoda:
public ProductionOrder save(@RequestBody ProductionOrder productionOrder)
do której, jak się domyślam, uderzasz, przyjmuje obiekt klasy productionOrder. Angular wysyła Obiekt Item. Nie ma po drodze mechanizmu który skonwertowałby Item na productionOrder. Prawdopodobnie masz gdzieś fabrykę Itemów, do których musisz wysłać odebrany obiekt.
Jeśli zmienisz metodę na:
public ProductionOrder save(@RequestBody Item item) {

powinno co
@Uszatyy: Dzięki za trop i pomoc, ale niestety nie udało się ze względu na to że jak to zmienię to gryzie się ze zwracanym typem albo metody lub service. ~,~ Chyba dam sobie z tym problemem spokój na jakiś czas, wiedząc że w najbliższym dniach nie mam czasu.