尝试使用@JsonIdentityInfo jackson批注时出现错误。当我尝试反序列化对象时,出现以下异常:
无法读取JSON:已经有ID(java.lang.Integer)[1]的POJO(通过参考链:eu.cobiz.web.domain.Site [“ operators”]-> eu.yavix.web.domain.Account [“ image”]-> eu.cobiz.web.domain.Image [“ @ Image”]);嵌套的异常是 com.fasterxml.jackson.databind.JsonMappingException : 已经有ID的POJO (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注释会出现问题,因为如果我删除注释,问题就会消失(就像我为帐户所做的那样),但是据我了解,新功能对于循环依赖项很有用,而在其他情况下对我也很有用。因为这两个图像是不同的对象,所以它们之间不应有冲突。
有人对如何解决有什么想法吗?
scope注释ID 时应使用参数。然后,反序列化器将确保ID在范围内是唯一的。
scope
来自注释类型JsonIdentityInfo:
JsonIdentityInfo
范围用于定义对象ID的适用性:所有ID在其范围内必须唯一;其中范围定义为此值和生成器类型的组合。
例如
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class,property="@id", scope = Account.class)