杰克逊(Jackson)对象上的重载二传手

时间:2018-10-27 07:19:23

标签: java json jackson

我不确定这是否可行,但我想让Jackson可序列化对象上的setter重载。这样,根据该字段中的对象,其反序列化的方式将有所不同。

示例

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);
    }
}

如果这不可能,有人会给我替代方法吗?我担心的是,在只有一个设置器的简单情况下,Jackson不必选择将对象反序列化为JSON的对象,因此不确定是否可以。

更新:以上给出的是com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "object"

2 个答案:

答案 0 :(得分:1)

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

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

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

然后,您的bean将变得干净,并根据需要创建自己的JSON

答案 1 :(得分:0)

由于杰克逊实际上无法像这样使设置员超载,所以我的解决方法如下:

我做了一个反序列化器,将MyObject2转换为MyObject1并有一个setter,所以我的课看起来像这样:

public class Thing {

    @JsonDeserialize(using = MyObjectDeserializer.class)
    private MyObject1 object;

    public MyObject1 getObject() {
        return object;

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