23

尝试使用 @JsonIdentityInfo jackson 注释时出现错误。当我尝试反序列化对象时,出现以下异常:

无法读取 JSON:已经有 POJO for id (java.lang.Integer) [1](通过参考链:eu.cobiz.web.domain.Site["operators"]->eu.yavix.web.domain.Account ["image"]->eu.cobiz.web.domain.Image["@Image"]);嵌套异常是com.fasterxml.jackson.databind.JsonMappingException :已经有 POJO for id (java.lang.Integer) [ 1](通过引用链:eu.yavix.web.domain.Site["operators"]->eu.cobiz.web.domain.Account["image"]->eu.cobiz.web.domain.Image[" @图片”])

我试图反序列化的 JSON 看起来像:

{
"@Site": 1,
"siteId": 1,
"name": "0",
"address": {
    "@Address": 2,
    "addressId": 4,
    "number": "22"
},
"operators": [
    {
        "accountId": 1,
        "email": "user982701361@yavix.eu",
        "image": {
            "@Image": 1,
            "imageId": 1,
            "uri": "http://icons.iconarchive.com/icons/deleket/purple-monsters/128/Alien-awake-icon.png"
        }
    },
    {
        "accountId": 2,
        "email": "user174967957@yavix.eu",
        "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 注释上,因为如果我删除注释,问题就会消失(就像我为帐户所做的那样),但据我了解,新功能对循环依赖很有用,这在其他情况下对我很有用。两张图片之间不应该有冲突,因为它们是不同的对象。

我该如何解决这个问题或问题是什么?

4

2 回答 2

31

scope注释 id 时应该使用参数。然后反序列化器将确保 id 在范围内是唯一的。

从注释类型JsonIdentityInfo

Scope 用于定义 Object Id 的适用性:所有 id 在其范围内必须是唯一的;其中范围定义为此值和生成器类型的组合。

例如

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class,property="@id", scope = Account.class)
于 2014-05-27T01:48:06.467 回答
7

为避免 id 冲突,请尝试使用ObjectIdGenerators.PropertyGenerator.classorObjectIdGenerators.UUIDGenerator.class代替ObjectIdGenerators.IntSequenceGenerator.class

于 2014-02-03T19:57:50.850 回答