Spring Boot:默认情况下不支持 Java 8 日期/时间类型 java.time.OffsetDateTime

Nde*_*yqi 12 java spring jackson jsr310

我已经添加了 JavaTimeModule,但仍然无法让 OffsetDateTime 从 RethinkDB @Configuration public class JacksonOffsetDateTimeMapper{ 获取一些数据

@Bean
@Primary
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
    return builder.build()
            .registerModule(new JavaTimeModule());
}
Run Code Online (Sandbox Code Playgroud)

}

Jackson 的 Gradle 依赖项:实现组:'com.fasterxml.jackson.core',名称:'jackson-databind',版本:'2.13.1'

实现 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

实现组:'com.fasterxml.jackson.module',名称:'jackson-module-parameter-names',版本:'2.13.1'

Gui*_*sco 2

不由 Spring 管理并使用“new ObjectMapper()”而不是自动装配的对象仍然会面临这个问题。我在配置 MappingJackson2MessageConverter 以与 JMS 一起使用时遇到了这个问题,因此在这种情况下,我必须将 ObjectMapper 显式设置为 MappingJackson2MessageConverter 对象,如下所示。

    @Bean
    public MessageConverter messageConverter(){
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();

        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName("_type");
        converter.setObjectMapper(objectMapper());
        return converter;
    }

    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        return objectMapper;
    }
Run Code Online (Sandbox Code Playgroud)

此外,我们还可以在 objectMapper 方法之上添加 @Bean 注释,这样 Spring 管理的对象将使用此映射器。

如果已经有一个由 Spring 管理的 ObjectMapper,我们可以将 ObjectMapper 注入到 messageConvert 中,如下所示。

@Bean
public MessageConverter messageConverter(ObjectMapper objectMapper) 
{
   MappingJackson2MessageConverter converter = new 
   MappingJackson2MessageConverter();

   converter.setTargetType(MessageType.TEXT);
   converter.setTypeIdPropertyName("_type");
   converter.setObjectMapper(objectMapper);
   return converter;
}
Run Code Online (Sandbox Code Playgroud)