Wpis z mikrobloga

Miraski z #java:
jak musi byc zaannotowane JPA (Model) zeby Jackson zmapowal mi cos takiego poprawnie?
Mam takiego JSON'a ktory jest wysylany POST zeby utworzyc EventDetail

{
"event":345,
"date":"2017-07-09T05:47:31.054Z",
"body":"test"
}

a model jest taki:

@Entity
public class EventDetail{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "event_id")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@JsonIdentityReference(alwaysAsId = true)
private Event event;
private String body;
private LocalDate date;

Co zrobic zeby Jackson wiedzial, ze pole Event ma zmapowac jako referencje do Event?
Poki co dostaje buga:

JSON parse error: Unresolved forward references for: ; nested exception is com.fasterxml.jackson.databind.deser.UnresolvedForwardReference: Unresolved forward references for: at [Source: (PushbackInputStream); line: 1, column: 58]Object id [346] (for com.project.server.model.Event) at [Source: (PushbackInputStream); line: 1, column: 12].]


#programowanie
  • 5
@Ewentualnie: myslalem o DTO ale cos takiego jest tak powszechne ze myslalem ze jest gotowe rozwiazanie na to, a nie ze kazdy po kolei bierze DTO, potem new EventDetail, entity manager do ref'a i tyle.
Jak rzeczywiscie nei ma na to gotowego rozwiazania z automatu to oczywiscie tak zrobie.
@Ewentualnie też racja. Parę linijek kodu tylko. Używanie entity MANAGER w serwisie jest ok? Bo używam go wszędzie tam gdzie muszę powiązać rekordy a nie ma potrzeby wczytywac całego rekordy bo mam id i tyle mi potrzebne.
@trustME: moze troche nie w temat ale nie ma w twoim dev-envie takiego czegos jak w Visual Studio masz "Paste Special As JSON/XML Classes"? Kopiujesz jsona i wklejasz w VSie i samo Ci tworzy klasy.

A tego probowales? http://www.jsonschema2pojo.org/

A co do mapowania to wiem tylko, ze w C# mapuje sie poprzez atrybuty np;

[JsonProperty(PropertyName = "Priorities")]
[XmlArray("Priorities"), XmlArrayItem(typeof(Priority), ElementName = "Priority")]
public List PrioritiesList { get; set; }