Das neu hinzugefügte LinkCollectingAssociationHandler
wirft aufgrund einer mehrdeutigen Verknüpfung in meiner Domänenklasse eine MappingException
.
Das Links-Array sieht folgendermaßen aus:
[<http://localhost:8080/rooms/2/roomGroups>;rel="roomGroups", <http://localhost:8080/rooms/2/userGroup>;rel="userGroup", <http://localhost:8080/rooms/2/room>;rel="room", <http://localhost:8080/rooms/2/originatingConferences>;rel="originatingConferences", <http://localhost:8080/rooms/2/user>;rel="user"]
Und es versucht, eine weitere "Raum" -Relation hinzuzufügen, wenn es die Ausnahme auslöst.
Das Problem ist, dass es scheint, Links zu Relationen hinzuzufügen, die ich explizit mit @RestResource(exported = false)
Hier ist ein Beispiel für eine Beziehung, von der ich glaube, dass sie dieses Problem verursacht:
%Vor% Der Typ RoomsByUserAccessView
hat eine eingebettete ID, die aus einem Room
und einem User
besteht.
Ich habe die eingebettete ID-Eigenschaft auch mit:
versehen %Vor%und seine Eigenschaften wie folgt:
%Vor%Wie kann ich erreichen, dass diese Relationen beim Serialisieren zu JSON richtig ignoriert werden?
Mein Code funktionierte vor DATAREST-262 ( Ссылка )
Die vollständige Fehlermeldung, die zurückgegeben wird, wenn ich versuche, die Räume / den Endpunkt zu besuchen, lautet wie folgt:
{
timestamp: "2014-03-17T13:38:05.481-0500"
error: "Internal Server Error"
status: 500
exception: "org.springframework.http.converter.HttpMessageNotWritableException"
message: "Could not write JSON: Detected multiple association links with same relation type! Disambiguate association @com.fasterxml.jackson.annotation.JsonIgnore(value=true) @javax.persistence.ManyToOne(fetch=EAGER, cascade=[], optional=true, targetEntity=void) @org.springframework.data.rest.core.annotation.RestResource(description=@org.springframework.data.rest.core.annotation.Description(value=), path=, exported=false, rel=) private com.renovo.schedulerapi.domain.Room com.renovo.schedulerapi.domain.RoomsByUserAccessViewId.room using @RestResource! (through reference chain: org.springframework.hateoas.PagedResources["content"]->java.util.UnmodifiableCollection[0]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Detected multiple association links with same relation type! Disambiguate association @com.fasterxml.jackson.annotation.JsonIgnore(value=true) @javax.persistence.ManyToOne(fetch=EAGER, cascade=[], optional=true, targetEntity=void) @org.springframework.data.rest.core.annotation.RestResource(description=@org.springframework.data.rest.core.annotation.Description(value=), path=, exported=false, rel=) private com.renovo.schedulerapi.domain.Room com.renovo.schedulerapi.domain.RoomsByUserAccessViewId.room using @RestResource! (through reference chain: org.springframework.hateoas.PagedResources["content"]->java.util.UnmodifiableCollection[0])"
}
Ich hatte ein sehr ähnliches Problem. Beim Hinzufügen einer bidirektionalen Beziehung zwischen zwei Entitäten
Ich habe eine Ausnahme erhalten "" Konnte JSON nicht schreiben: Mehrere Assoziationsverbindungen mit demselben gefunden
relation type! ", während ich einige Lösungen ausprobiere, die ich hier gefunden habe
( @JsonIgnore, @JsonIdentity, @RestResource
, ich habe auch versucht zu tun, was Oliver angeboten
)
(Die Beziehung wurde ordnungsgemäß mit @JsonManagedReference
und @JsonBackReference
definiert)
Nichts half.
Am Ende habe ich verstanden, dass der Frühling Datenrest versucht zu
Finde heraus, ob die verknüpfte Entität verknüpfbar ist (während du versuchst, den json des
zu erstellen)angefragte Entität)
( LinkCollectingAssociationHandler : doWithAssociation -> isLinkableAssociation
)
, Dafür sucht er nach einem Repository, das sich mit dem
beschäftigtverbundene Einheit. Nach dem Hinzufügen eines Repositorys für die verwandte Entität .. funktioniert wie ein Charme ..
(Ich nehme an, dass nach dem Hinzufügen eines Repos eine Zuordnung RepositoryAwareResourceInformation ist
wurde für diese Entity erstellt (das habe ich beim Debuggen gesehen).
Ich hatte dieses Problem und löste es, wie Ron es vorschlägt, aber ich dachte, ich würde es ein wenig erläutern. Ich habe die ersten paar Male, als ich Rons Antwort gelesen habe, nicht ganz verstanden ...
%Vor%Ich hatte Repositories für Player und Trade, aber keine für PlayerTrade:
%Vor%Sobald ich das letzte Repo hinzugefügt habe, hat es funktioniert.
%Vor%Ich habe versucht, @RestResource mit rel oder exclude zu verwenden, konnte sie aber nicht einwählen. Bedeutet dies, dass jede Entität in unserem JSON-Graphen ein Repository haben muss?
Tags und Links spring json spring-mvc spring-hateoas spring-data-rest