Java Jackson:使用默认(反)序列化程序
我正在尝试(反)序列化一个对象,该对象的属性类型来自maven依赖项,因此无法更改此类型的类。 此类型的类有一个Java Jackson:使用默认(反)序列化程序,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我正在尝试(反)序列化一个对象,该对象的属性类型来自maven依赖项,因此无法更改此类型的类。 此类型的类有一个@JsonSerialize和@JsonDeserialize注释 但是,我希望使用默认的序列化程序和反序列化程序,因为自定义序列化程序写入数组而不是对象。有没有一种方法可以使用注释告诉jackson使用默认(反)序列化程序?您可以使用jackson的mixins功能禁用注释 在以下示例中,任何反序列化到CustomerObj的尝试都将导致异常,因为其生成器有缺陷: @JsonDese
@JsonSerialize
和@JsonDeserialize
注释
但是,我希望使用默认的序列化程序和反序列化程序,因为自定义序列化程序写入数组而不是对象。有没有一种方法可以使用注释告诉jackson使用默认(反)序列化程序?您可以使用jackson的mixins功能禁用注释 在以下示例中,任何反序列化到
CustomerObj
的尝试都将导致异常,因为其生成器有缺陷:
@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);
谢谢,这可能适用于反序列化程序,但是@JsonSerialize没有生成器选项。@david:mixin功能适用于所有批注,因此您应该查阅文档,确定要为@JsonSerialize
覆盖哪个选项。我的猜测是,您需要使用com.fasterxml.jackson.databind.JsonSerializer.None.class
覆盖,但请仔细查看。好的,我想我应该把我的问题说得更清楚。问题不在于覆盖(反)序列化程序的位置,而在于使用哪一个。我尝试了@JsonSerialize(使用=JsonSerializer.None.class),但随后使用了源代码中注释的序列化程序。当我使用自定义序列化程序并使用@JsonSerialize(使用=CustomSerializer.class)时,它可以工作。