2013-03-15 10 views
14

Ich habe einen Fehler, wenn Sie versuchen, mit @JsonIdentityInfo jackson Annotation arbeiten. Wenn ich versuche, um das Objekt zu deserialisieren erhalte ich die folowing Ausnahme:JsonMappingException: Bereits POJO für ID

kann nicht JSON lesen: Bereits POJO hatte für id (java.lang.Integer) [1] (durch Referenzkette: eu.cobiz.web. domain.Site ["Operatoren"] -> eu.yavix.web.domain.Account ["image"] -> eu.cobiz.web.domain.Image ["@ Image"]); verschachtelte Ausnahme ist com.fasterxml .jackson.databind.JsonMappingException: Bereits POJO für ID (java.lang.Integer) [1] (durch Referenzkette: eu.yavix.web.domain.Site ["operators"] -> eu. cobiz.web.domain.Account ["Bild"] -> eu.cobiz.web.domain.Image ["@ Image"])

Die JSON ich Aussehen versuche wie deserialisieren:

{ 
"@Site": 1, 
"siteId": 1, 
"name": "0", 
"address": { 
    "@Address": 2, 
    "addressId": 4, 
    "number": "22" 
}, 
"operators": [ 
    { 
     "accountId": 1, 
     "email": "[email protected]", 
     "image": { 
      "@Image": 1, 
      "imageId": 1, 
      "uri": "http://icons.iconarchive.com/icons/deleket/purple-monsters/128/Alien-awake-icon.png" 
     } 
    }, 
    { 
     "accountId": 2, 
     "email": "[email protected]", 
     "image": { 
      "@Image": 2, 
      "imageId": 2, 
      "uri": "http://icons.iconarchive.com/icons/deleket/purple-monsters/128/Alien-awake-icon.png" 
     } 
    } 
] 
} 

ist mein Domain-Objekt mit

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@Image") 

Das Problem tritt auf @Id Anmerkung kommentiert, da, wenn ich die Anmerkung das Problem verschwindet entfernen (wie ich es für Rechnung tat), aber nach meinem Verständnis ist das neue Feature nützlich für zyklische Abhängigkeiten, was für mich in anderen Szenarien nützlich ist. Es sollte keinen Konflikt zwischen den 2 Bildern geben, da es sich um verschiedene Objekte handelt.

Hat jemand eine Idee zur Lösung oder was ist das Problem?

Antwort

18

Sie sollen Umfang Eigenschaft verwenden, wenn die IDs mit Anmerkungen versehen zu vermeiden. Dann würde der Deserialisierer sicherstellen, dass die ID innerhalb des Bereichs eindeutig ist.

von Annotation Typ JsonIdentityInfo:

Scope verwendet wird Anwendbarkeit einer Objekt-ID zu definieren: alle IDs in ihrem Umfang einzigartig sein muss; wobei der Bereich als Kombination aus diesem Wert und dem Generatortyp definiert ist.

z.B. @JsonIdentityInfo (Generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@ id", scope = Account.class)

5

Um id Konflikt versuchen zu verwenden ObjectIdGenerators.PropertyGenerator.class oder ObjectIdGenerators.UUIDGenerator.class statt ObjectIdGenerators.IntSequenceGenerator.class

+0

denke ich, dass nicht für die Deserialisierung gilt - die IDs bereits vorhanden sind. –

Verwandte Themen