我试图(de)序列化一个具有属性来自maven依赖关系的属性的对象,因此我无法更改此类型的类。
此类的类具有@JsonSerialize
和@JsonDeserialize
注释。
但是,我想使用默认的序列化程序和反序列化程序,因为自定义序列化程序会写入数组而不是对象。有没有办法,使用注释,告诉杰克逊使用默认(de)序列化器?
答案 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);