【问题标题】:Jackson, how define a default type impl for interface field?Jackson,如何为接口字段定义默认类型 impl?
【发布时间】:2020-02-14 14:19:30
【问题描述】:

我需要将 JSON 反序列化为带有 Serializable 字段的 Java 类。 在下面的 Java 类中,value 字段是一个接口,其想法是视图可以发送以下类型的值:StringDoubleLongArrayList。如果我将值字段的类型从Serializable 更改为Object,它将按预期工作。

public class UpdateAttribute implements Serializable {
    //..
    // There is something like: @JsonImplType(Object.class)
    private Serializable value;
}

我的问题是,有没有这样一种方法可以为 value 字段定义一个默认的类类型?比如:@JsonImplType(Object.class)?

【问题讨论】:

    标签: java jackson


    【解决方案1】:

    解决这个问题的方法是使用来自jackson-databind 模块的注解。 这里提出了一个类似的问题:Jackson - How to specify a single implementation for interface-referenced deserialization?

    public class UpdateAttribute implements Serializable {
        //..
        @JsonDeserialize(as = Object.class)
        private Serializable value;
    }
    

    但是,有一个细节需要考虑。 UpdateAttributesetValue 方法不能用 Serializable 参数声明。因为杰克逊不知道从ObjectSerializable 的选角。因此,最终类应如下所示:

    public class UpdateAttribute implements Serializable {
    
        @JsonDeserialize(as = Object.class)
        private Serializable value;
    
        public void setValue(Object value) {
            this.value = (Serializable) value;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多