2013-03-15 16 views
14

Tôi gặp lỗi khi cố gắng làm việc với chú thích jackson @JsonIdentityInfo. Khi tôi cố gắng deserialize đối tượng tôi nhận được ngoại lệ folowing:JsonMappingException: Đã có POJO cho id

Không thể đọc JSON: Đã có POJO cho id (java.lang.Integer) [1] (thông qua chuỗi tham chiếu: eu.cobiz.web. domain.Site ["operator"] -> eu.yavix.web.domain.Account ["image"] -> eu.cobiz.web.domain.Image ["@ Image"]); ngoại lệ lồng nhau là com.fasterxml .jackson.databind.JsonMappingException: Đã có POJO cho id (java.lang.Integer) [1] (thông qua chuỗi tham chiếu: eu.yavix.web.domain.Site ["operator"] -> eu. cobiz.web.domain.Account ["image"] -> eu.cobiz.web.domain.Image ["@ Image"])

Các JSON Tôi cố gắng để deserialize trông giống như:

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

đối tượng miền của tôi là chú thích với

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

vấn đề nảy sinh trên chú thích @ id vì nếu tôi loại bỏ các chú thích vấn đề biến mất (như tôi đã làm cho tài khoản) nhưng trên sự hiểu biết của tôi các tính năng mới là hữu ích cho phụ thuộc cyclic mà là hữu ích cho tôi trong các kịch bản khác. Không nên có xung đột giữa 2 hình ảnh vì chúng là các đối tượng khác nhau.

Có ai có ý tưởng về cách giải quyết hoặc vấn đề là gì không?

Trả lời

18

Bạn nên sử dụng tài sản phạm vi khi chú thích id. Sau đó, de-serializer sẽ đảm bảo id là duy nhất trong phạm vi.

từ Chú Loại JsonIdentityInfo:

Phạm vi được sử dụng để xác định khả năng ứng dụng của một Id Object: tất cả các id phải là duy nhất trong phạm vi của mình; trong đó phạm vi được định nghĩa là sự kết hợp của giá trị này và kiểu máy phát.

ví dụ: @JsonIdentityInfo (máy phát điện = ObjectIdGenerators.IntSequenceGenerator.class, tài sản = "@ id", phạm vi = Account.class)

5

Để tránh xung đột id cố gắng sử dụng ObjectIdGenerators.PropertyGenerator.class hoặc ObjectIdGenerators.UUIDGenerator.class thay vì ObjectIdGenerators.IntSequenceGenerator.class

+0

Tôi nghĩ rằng không áp dụng cho deserialization - ID đã tồn tại. –

Các vấn đề liên quan