Spring Boot 中 OffsetDateTime 的 Jackson 日期格式

新手上路,请多包涵

我正在尝试从我的 Spring 应用程序输出一个 OffsetDateTime,并在我的 application.properties 中包含这些属性:

 spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm

但是,当返回日期时,它的格式为

"2017-01-30T16:55:00Z"

我应该如何在 Spring 应用程序中正确配置日期格式?

原文由 Dave 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 966
2 个回答

所以我设法找到了解决方案,但如果您有其他选择,请发布。

我最终创建了一个新的主 ObjectMapper bean,并为 OffsetDateTime 注册了一个带有自定义序列化程序的新模块。我可以在这里设置我自己的日期格式,使用 java.time.format.DateTimeFormatter 。我还必须用我的映射器注册 JavaTimeModule

 @Configuration
public class JacksonOffsetDateTimeMapper{

    @Primary
    @Bean
    public ObjectMapper objectMapper() {

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(OffsetDateTime.class, new JsonSerializer<OffsetDateTime>() {
            @Override
            public void serialize(OffsetDateTime offsetDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
                jsonGenerator.writeString(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(offsetDateTime));
            }
        });
        objectMapper.registerModule(simpleModule);

        return objectMapper;
    }

}

原文由 Dave 发布,翻译遵循 CC BY-SA 3.0 许可协议

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

通过这样做,您可以获得 ISO 8601 的 OffsetDateTime 属性,包括目标中的偏移量。

原文由 Utku A. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题