首页 > 解决方案 > Jackson 对象上的重载设置器

问题描述

我不确定这是否可能,但我想在杰克逊可反序列化对象上有一个重载的设置器。因此,根据该字段中的对象,它会以不同的方式反序列化。

例子

public class Thing {
    private MyObject1 object;

    public MyObject1 getObject() {
        return object;

    public void setObject(MyObject1 object) {
        this.object = object;
    }

    public void setObject(MyObject2 object) {
        this.object = translate1To2(object);
    }
}

如果这是不可能的,有人会为我提供另一种方法吗?我担心的是,在只有一个 setter 的简单情况下,Jackson 不必选择将 JSON 反序列化为哪个对象,因此不确定它是否可以。

更新:上面给出了一个com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "object"原样。

标签: javajsonjackson

解决方案


我认为最好的方法是添加一个自定义反序列化类

@JsonDeserialize(using = ThingDeserializer.class)
public class Thing {
...
}

此处的反序列化示例 https://www.baeldung.com/jackson-deserialization

然后,您的 bean 将永远干净,并且您可以根据需要制作自己的 JSON


推荐阅读