Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson:使用默认(反)序列化程序_Java_Json_Serialization_Jackson - Fatal编程技术网

Java Jackson:使用默认(反)序列化程序

Java Jackson:使用默认(反)序列化程序,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我正在尝试(反)序列化一个对象,该对象的属性类型来自maven依赖项,因此无法更改此类型的类。 此类型的类有一个@JsonSerialize和@JsonDeserialize注释 但是,我希望使用默认的序列化程序和反序列化程序,因为自定义序列化程序写入数组而不是对象。有没有一种方法可以使用注释告诉jackson使用默认(反)序列化程序?您可以使用jackson的mixins功能禁用注释 在以下示例中,任何反序列化到CustomerObj的尝试都将导致异常,因为其生成器有缺陷: @JsonDese

我正在尝试(反)序列化一个对象,该对象的属性类型来自maven依赖项,因此无法更改此类型的类。 此类型的类有一个
@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)时,它可以工作。