我正在尝试使用jackson对象映射器将字节数组反序列化为java类型.
@H_403_6@ @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) public class A { String s; String b; } @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) public class B { String c; String b; } @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) public class C { List
并使用杰克逊方法,
@H_403_6@objectMapper.readValue(byte[] data,Class
因为我不确定字节数组包含什么对象,所以当它无法创建指定类型的对象时,我希望它失败.但是,objectMapper返回一个对象,其所有字段都初始化为null.我该如何避免这种行为?
@H_403_6@Ex: byte[] b; //contains Class B data byte[] a; //contains Class A data byte[] c// contains Class C data A a = objectMapper.readValue(c,A.class) is returning {s=null,b = null}
这是我配置了ObjectMapper,
@H_403_6@@Bean public ObjectMapper objectMapper(HandlerInstantiator handlerInstantiator) { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); builder.handlerInstantiator(handlerInstantiator); builder.failOnEmptyBeans(false); builder.failOnUnknownProperties(false); builder.simpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); builder.timeZone("UTC"); builder.serializationInclusion(JsonInclude.Include.NON_NULL); return builder.build(); }
最佳答案
objectMapper returns an object with all fields initialized to null. How
do i avoid this behavior?
输入对象中与目标类匹配的字段不会设置为null.
因此,请确保存在一些匹配的字段(具有相同名称的字段).
如果您不想要null,则可能具有这些字段的默认值.
这可以做到
> at field declaration String s =“default value”;
>默认情况下,无参数构造函数. Jackson将调用此构造函数,然后为JSON数据中的匹配字段设置值.
如果您的源json完全不同,而不是单个匹配字段,那么您将获得每个字段为空的对象.