Ich benutze Jackson, um mein JPA-Modell in JSON zu serialisieren.Serialisieren bidirektionale JPA-Entitäten zu JSON mit Jackson
Ich habe die folgenden Klassen:
import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.util.Set;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class)
@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@JsonManagedReference
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Child> children;
//Getters and setters
}
und
import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@JsonBackReference
@ManyToOne
@JoinColumn(name = "parentId")
private Parent parent;
//Getters and setters
}
ich das POJO-Mapping bin mit von Modell zu JSON serialisiert. Wenn ich einen Elternteil Objekt serialisiert erhalte ich die folgende JSON:
{
"id": 1,
"name": "John Doe",
"children": [
{
"id": 1,
"name": "child1"
},{
"id": 2,
"name": "child2"
}
]
}
Aber als ich ein Kind ich folgende JSON erhalten serialisiert: an die Mutter
{
"id": 1,
"name": "child1"
}
Die Referenz fehlt. Gibt es eine Möglichkeit, dies zu lösen?
ist es nicht schlimm, UI-bezogene Logik, z. B. JSON-Annotationen in eine Entität zu integrieren? Ist das nicht Modularisierung? – faisalbhagat
um ... nein.Das ist der Hauptgrund, warum Entitäten existieren: als Datamodell-Repräsentation, sei es JPA, XML, JSON oder sogar eine Kombination von diesen. Wenn Ihre gesamte App einen einzigen Satz von Entitäten verwendet, ist dies ein Indikator für eine gut gestaltete App - ein einzelner Satz von Entitäten führt zu einem einzigen Fehlerpunkt, der die App im Gegenzug in viel höherem Maße wartbar (und austauschbar) macht. – specializt