Angenommen habe ich die folgenden JPA-Entitäten:REST: Wie kann man ein Java-Objekt "seicht" zu JSON serialisieren?
@Entity
public class Inner {
@Id private Long id;
private String name;
// getters/setters
}
@Entity
public class Outer {
@Id private Long id;
private String name;
@ManyToOne private Inner inner;
// getters/setters
}
Sowohl Frühling und Java EE haben REST-Implementierungen mit Standard-Serializer die Will Marshall die Entitäten zu/von JSON ohne weitere Codierung. Aber wenn Outer
zu JSON Konvertierung sowohl Frühlings- und EE Nest eine vollständige Kopie der Inner
in ihm:
// Outer
{
"id": "1234",
"name": "MyOuterName",
"inner": {
"id": "4321",
"name": "MyInnerName"
}
}
Dies ist das richtige Verhalten aber problematisch für meine Web-Services, da die Objektgraphen bekommen tief/komplex und enthalten kreisförmige Referenzen. Gibt es eine Möglichkeit, den bereitgestellten Marshaller so zu konfigurieren, dass er die POJOs/Entitäten auf eine "flache" Weise marshallen lässt, ohne dafür einen eigenen JSON-Serializer erstellen zu müssen? Ein benutzerdefinierter Serializer, der auf allen Entitäten funktioniert, wäre in Ordnung. Ich würde im Idealfall wie etwa wie folgt:
// Outer
{
"id": "1234",
"name": "MyOuterName",
"innerId": "4321"
}
Ich würde auch, wie es zu „unmarshall“ die JSON zurück in das entsprechende Java-Objekt. Bonus-Kudos, wenn die Lösung sowohl mit Spring als auch mit Java EE arbeitet. Vielen Dank!
Das ist, warum. Sehen Sie sich dies an (http://stackoverflow.com/a/36175349/1426227). Sind maßgeschneiderte DTOs eine Option? –
@ CássioMazzochiMolin: Ich mag den Ansatz, aber das Projekt ist jetzt ziemlich ausgereift. Es ist an dieser Stelle nicht praktisch, alle vorhandenen Dienste (und ihre Kunden) auf die Verwendung von DTOs anstelle der Entitäten umzustellen, und ich möchte nicht "mixen und anpassen". –