Wie löst man den Zirkelverweis in JSON-Serialisierer, der durch bidirektionales "Viele zu viele Hibernate" -Mapping verursacht wurde?

8

Ich versuche POJO zu JSON zu serialisieren, stecke aber in das zirkuläre Referenzproblem. Ich weiß, wie man mit eins zu vielen umgehen und Beziehungen mit den @JsonBackReference und @JsonManagedReference umkehren kann.

Mein Problem ist eine bidirektionale Viele-zu-Viele-Beziehung (zB ein Student kann viele Kurse haben und jeder Kurs kann viele Studenten haben), Eltern verweisen auf Kind und Kind zurück auf Eltern und hier stirbt mein Serializer. Meines Erachtens kann ich @JsonBackReference hier nicht verwenden, da der Werttyp der Eigenschaft eine Bean sein muss: Es kann keine Collection, Map, Array oder Enumeration sein.

Kann jemand bitte sagen, wie ich mit diesem Szenario umgehen kann?

    
M.Rather 17.03.2011, 22:17
quelle

5 Antworten

8

Sie können @JsonIgnoreProperties("someField") auf einer der Seiten der Relationen verwenden (die Annotation ist auf Klassenebene). Oder @JsonIgnore

    
Bozho 17.03.2011 22:22
quelle
1

Da @Bozho geantwortet hat, @JsonIgnoreProperties zu verwenden, versuche es, es hat für mich funktioniert.

Im Folgenden finden Sie meine Modelle mit @JsonIgnoreProperties:

%Vor%

Im Wertattribut von @JsonIgnoreProperties müssen wir die Sammlungsarteigenschaft des Counter (related) -Modells angeben.

    
udit khare 20.01.2016 14:09
quelle
0

Sie können die Dozer-Zuordnung auch verwenden, um ein POJO in eine Map zu konvertieren und Felder auszuschließen. Zum Beispiel, wenn wir zwei Klassen PojoA und PojoB mit bidirektionalen Beziehungen haben, definieren wir die Zuordnung wie folgt

%Vor%

Dann definieren Sie eine Bean, die die obige Dozer-Mapping-Datei als Eigenschaft einstellt.

%Vor%

Dann in der Klasse, in der Sie serialisieren

%Vor%

Dozer Handbuch hier .

    
Prasanna 18.03.2011 04:57
quelle
0

Was @Bozho bereits erwähnt hat ...

Ich stecke gerade mit Jackson 1 fest, weil ich Google Cloud Endpoints verwende. Das könnte einigen Leuten helfen, auch wenn Jackson 2 schon eine Weile weg ist. Obwohl ich nicht das gesamte Objekt deserialisiert brauche, ist die Referenz immer noch sehr notwendig.

Ich habe @JsonIgnore in die Felder eingefügt, die den Zirkelverweis verursachen, habe dann aber für jeden einen neuen Getter erstellt, so dass in meinen APIs immer noch ein flacher Verweis zurückgegeben wird.

%Vor%

Bei Cloud-Endpunkten führt dies dazu, dass in der GET-Nutzlast ein flacher "fooKey" zurückgegeben wird, während "foo" weggelassen wird.

    
jpitt42 11.11.2013 20:33
quelle
-1

Wenn Sie das Sammlungsobjekt haben, lassen Sie es

sein %Vor%

Dies sollte funktionieren und das Objekt, das Sie jetzt bekommen, kann json serialisiert werden und es ist sauber

    
Praneeth 17.03.2011 23:28
quelle