Jackson deserialize JsonIdentityReference (alwaysAsId = true)

2022-09-03 02:40:27

跟进这个问题:在这里提问

@JsonIdentityReference(alwaysAsId = true)并且从序列化端开始工作得很好,但是在反序列化时效果不佳,因为它无法解析对象 ID 引用。@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class)

有没有办法让它反序列化?编写自定义反序列化程序似乎有些过分。


答案 1

您可以使用简单的 setter 解串器,而不是自定义反序列化程序:

public class Container {
    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
    @JsonIdentityReference(alwaysAsId = true)
    private Foo foo;

    public Foo getFoo() {
        return foo;
    }
    public Container setFoo(Foo foo) {
        this.foo = foo;
        return this;
    }
    @JsonProperty("foo")
    public void setFoo(String id) {
        foo = new Foo().setId(id);
    }
}

使用此方法正确序列化 的示例字符串{"foo":"id1"}Jackson 2.5.2


答案 2