2013-03-15 3 views
14

У меня возникла ошибка при попытке работать с аннотацией @JsonIdentityInfo jackson. Когда я пытаюсь десериализации объекта я получаю на следующие исключения:JsonMappingException: У меня уже был POJO для id

Не удалось прочитать JSON: Уже было POJO для идентификатора (java.lang.Integer) [1] (с помощью эталонной цепи: eu.cobiz.web. domain.Site ["operator"] -> eu.yavix.web.domain.Account ["image"] -> eu.cobiz.web.domain.Image ["@ Image"]); вложенное исключение - com.fasterxml .jackson.databind.JsonMappingException: Уже был POJO для id (java.lang.Integer) [1] (через ссылочную цепочку: eu.yavix.web.domain.Site ["operator"] -> eu. cobiz.web.domain.Account ["image"] -> eu.cobiz.web.domain.Image ["@ Image"])

JSON Я пытаюсь десериализации выглядит как:

{ 
"@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" 
     } 
    } 
] 
} 

Мой объект домен помечается

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

Проблема возникает на @Id аннотацию, так как, если удалить аннотацию проблема исчезает (как я сделал для учетной записи), но, по моему мнению, новая функция полезна для циклических зависимостей, которые полезны для меня в других сценариях. Не должно быть конфликта между двумя изображениями, поскольку они являются разными объектами.

Есть ли у кого-нибудь идея о том, как решить или в чем проблема?

ответ

18

Вы должны использовать области видимости свойства при аннотирования идентификаторами. Затем де-сериализатор удостоверится, что идентификатор уникален в пределах области действия.

из аннотаций Тип JsonIdentityInfo:

Область используется для определения применимости идентификатора объекта: все идентификаторы должны быть уникальными в пределах их объема; где область определяется как комбинация этого значения и типа генератора.

например. @JsonIdentityInfo (generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@ id", scope = Account.class)

5

Чтобы избежать конфликтов ID попытаться использовать ObjectIdGenerators.PropertyGenerator.class или ObjectIdGenerators.UUIDGenerator.class вместо ObjectIdGenerators.IntSequenceGenerator.class

+0

Я думаю, что это не относится к десериализации - идентификаторы уже существуют. –

Смежные вопросы