Ich erstelle einen RESTful Web Service, der JSON konsumiert und zurückgibt. Ich stoße auf die folgende Stack-Ablaufverfolgung, wenn ich versuche, ein ESRBReading-Objekt über die Service-Schicht von der Datenbank abzurufen. Wenn ich jedoch das Spring Data JPA-Repository direkt in den Controller einfüge und es zum Abrufen des ESRBReating nach ID verwendet, funktioniert es einwandfrei. Beim Aufruf über die Service-Schicht funktioniert es jedoch nicht. Ich habe den Stack-Trace und den Code unten zur Verfügung gestellt. Kann mir jemand erklären, warum dies beim Durchlaufen einer Service-Schicht passiert, aber nicht beim direkten Durchgehen des Spring Data JPA-Repositorys? Wie behebe ich dieses Problem?
Stapelverfolgung
%Vor%Controller
%Vor%Service
%Vor%Repository
%Vor%Modell
%Vor%Dieser Controller-Code funktioniert einwandfrei und geht direkt durch das Repository.
%Vor%}
UPDATE:
Ich folgte Randall Harleighs Ratschlag und setzte die umgekehrte Sammlung mit @JsonIgnore. Aber jetzt bekomme ich eine völlig andere Stack-Spur. Es scheint nun, Jackson / Spring weiß nicht, wie man ESBRBRating serialisiert. Irgendwelche Tipps zu diesem Thema?
%Vor%Update 2:
Ich habe @Proxy (lazy = false) in die Klasse ESRBReating gestellt und jetzt funktioniert es gut. Aber ich bin gespannt, welche Auswirkungen dies auf die Performance haben könnte?
%Vor%Wie hier gefragt, ist die Game-Klasse
%Vor%Dies tritt normalerweise auf, wenn Sie ein Objekt über @Responsebody (oder in Ihrem Fall als Antwortkörper über @RestController) zurückgeben und ein Objekt serialisiert wird, aber Kinder in einer LAZY-Sammlung hat, die nicht referenziert wurden. Zu dem Zeitpunkt, an dem Sie sich in Ihrem Controller befinden, ist keine Transaktion mehr aktiv, die Ihnen das Holen erleichtert (wie die, die Sie in Ihrem @Service gestartet haben). Sie können entweder Ihre Abrufstrategie EAGER erstellen, Ihre Sammlungen als Referenz in Ihre Transaktion einbinden oder Ihre LAZY-Sammlungen JSON Transient erstellen.
@JsonIgnore Annotation könnte Ihr Problem lösen, aber es bewirkt, dass das bestimmte Feld, das Sie ursprünglich als FetchType.LAZY festgelegt haben, vollständig ignoriert wird. Ein besseres ist hier gegeben Ссылка
Tags und Links spring-data-jpa spring json rest spring-mvc