有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Jackson对象上的java重载setter

我不确定这是否可行,但我希望在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);
    }
}

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

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


共 (2) 个答案

  1. # 1 楼答案

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

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

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

    然后,你的bean将永远干净,你可以随心所欲地创建自己的JSON

  2. # 2 楼答案

    因为在Jackson中,你不能像这样重载二传手,所以我的解决方案如下:

    我制作了一个反序列化程序来将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;
        }
    }