【发布时间】:2022-01-06 07:59:36
【问题描述】:
我正在升级我的项目的版本,我目前正在使用 jackson-databind-2.13.0 .但我注意到 ObjectMapper 的 enable 方法已被弃用。
他们说要这样使用它。
@deprecated Since 2.13 use {@code JsonMapper.builder().enable(...)}
但我无法使用它。
下面是我的 ObjectMapper 实例创建代码。我该如何改变?
@Bean(name = {"objectMapper"})
@Primary
ObjectMapper objectMapper() {
return newObjectMapper();
}
public static ObjectMapper newObjectMapper() {
ObjectMapper objectMapper =
new ObjectMapper()
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(OffsetDateTime.class, new OffsetDateTimeSerializer());
javaTimeModule.addDeserializer(OffsetDateTime.class, new OffsetDateTimeDeserializer());
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer());
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer());
objectMapper
.registerModule(javaTimeModule)
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return objectMapper;
}
解决方案:
ObjectMapper objectMapper = JsonMapper
.builder()
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)
.serializationInclusion(Include.NON_NULL).build();
【问题讨论】:
-
为什么不能用?你收到错误了吗?结果出乎意料吗?弃用评论更清楚地指出
new ObjectMapper().enable(…)应转换为JsonMapper.builder().enable(…).build() -
你为什么不使用 Spring Boot 配置的实例,让 Spring Boot 配置它(并且你提供一些属性来配置它?
-
被弃用并不意味着你不能使用它,这意味着你不应该使用它。如:是的,您现在仍然可以使用它,但是您应该在从新(er)版本的库中删除该方法之前重构您的代码
-
我实际使用它,我没有收到任何错误。我只是想改变。
-
你用的是什么?这个方法还是Spring Boot配置的一个(因为你不是自己配置的)。
标签: java spring spring-boot objectmapper jackson-databind