杰克逊:使用默认(de)序列化器

时间:2017-05-12 12:55:20

标签: java json serialization jackson

我试图(de)序列化一个具有属性来自maven依赖关系的属性的对象,因此我无法更改此类型的类。 此类的类具有@JsonSerialize@JsonDeserialize注释。

但是,我想使用默认的序列化程序和反序列化程序,因为自定义序列化程序会写入数组而不是对象。有没有办法,使用注释,告诉杰克逊使用默认(de)序列化器?

1 个答案:

答案 0 :(得分:0)

您可以使用Jackson的mixins功能禁用注释。

在以下示例中,任何反序列化为CustomerObj的尝试都会因缺陷Builder而导致异常:

@JsonDeserialize(builder = CustomerObj.class)
public class CustomerObj {
    public String name;
    public int age;

    public CustomerObj build() {
        throw new RuntimeException("JsonDeserializer invoked");
    }
}

创建一个带有JsonDeserialize注释的mixin,用于禁用损坏的构建器:

@JsonDeserialize(builder = java.lang.Void.class)
public static abstract class CustomerMixin { }

ObjectMapper实例上注册mixin:

ObjectMapper om = new ObjectMapper();
om.addMixIn(CustomerObj.class, CustomerMixin.class);

享受反序列化工作:

final String json = "{\"name\":\"Brian\",\"age\":41}";
CustomerObj customer = om.readValue(json, CustomerObj.class);