gpt4 book ai didi

java - Jackson:自定义解析 ObjectId(来自@JsonIdentityInfo)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:50 28 4
gpt4 key购买 nike

在我的 Spring WebMVC 应用程序中,我正在尝试反序列化对象引用列表。

这是我的模型字段的样子:

@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Article {
@Id
private Integer id;

@ManyToMany(cascade=CascadeType.ALL)
@JsonIdentityReference(alwaysAsId=true)
private List<Article> related;
}

每当我尝试反序列化 JSON 对象时,我都会收到以下调试消息:

com.fasterxml.jackson.databind.JsonMappingException: Could not resolve Object Id [351] (for [simple type, class com.company.package.domain.Article]) -- unresolved forward-reference? (through reference chain: com.company.package.domain.Article["related"])

对象看起来像这样:

{ 
"id": 123,
"related": [351]
}

我已经尝试编写我的自定义反序列化器来处理这个问题,但由于关系是针对同一类的对象,Jackson 也会尝试使用自定义反序列化器反序列化父对象,这显然会失败,因为它是不只是一个整数……

那么有没有办法告诉 jackson 使用数据库来查找ID背后的对象?

最佳答案

从版本 2.4.0 开始,您可以使用 @JsonIdentityInfo 注释的“解析器”属性。

@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
resolver = MyCustomObjectIdResolver.class,
scope = Article.class,
property = "id")
@JsonIdentityReference(alwaysAsId = true)
private List<Article> related;

当您这样做时,您很可能会被 https://github.com/FasterXML/jackson-databind/issues/524 惹恼因为@JsonIdentityReference(alwaysAsId=true)。

这已在 2.4.3 中修复 https://github.com/FasterXML/jackson-databind/commit/17690f355e19cee89967b075fe4a510d780b1d2b

关于java - Jackson:自定义解析 ObjectId(来自@JsonIdentityInfo),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20335661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com