【发布时间】:2019-12-19 05:28:22
【问题描述】:
我被要求更改我们的杰克逊映射配置,以便我们反序列化(来自 JSON)的每个空对象都将被反序列化为 null。
问题是我正在努力做到这一点,但没有任何运气。这是我们的ObjectMapper 配置示例(和示例):
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, true);
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_DATE_TIME));
javaTimeModule.addDeserializer(Instant.class, InstantDeserializer.INSTANT);
mapper.registerModule(javaTimeModule);
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
warmupMapper(mapper);
return mapper;
我想到了添加:
mapper.configure(
DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
但它只适用于字符串。
恐怕使用自定义反序列化器对我没有帮助,因为我正在编写一个通用(适用于所有对象)映射器。所以我可能需要一个委托或后处理反序列化方法之类的东西。
所以对于像"" 或{} 这样的json,我希望在java 中转换为null(而不是空字符串或Object 实例)。
【问题讨论】:
标签: java jackson deserialization