dre*_*nda 6 spring json jackson spring-boot
我正在使用 Spring Boot 1.5.3、Spring Data REST、HATEOAS 创建 REST 服务。我java.time.*在我的应用程序中使用日期/时间,并将其以 UTC 格式存储在数据库中。我想遵循最佳实践并在我的 REST 端点中返回 UTC 日期。
使用 @JsonFormat 我能够做到这一点:
@JsonFormat(timezone = "UTC", pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
@LastModifiedDate
private LocalDateTime lastModifiedDate;
Run Code Online (Sandbox Code Playgroud)
我想避免用它来注释我所有的 bean,我更喜欢有一个全局配置。根据这个增强请求,我能够用这个配置解决 50% 的问题:
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.serializers(
new LocalDateTimeSerializer(new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd'T'HH:mm:ss").toFormatter()));
jacksonObjectMapperBuilder.serializers(new ZonedDateTimeSerializer(
new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").toFormatter()));
}
};
}
Run Code Online (Sandbox Code Playgroud)
这解决了模式问题,但不是时区问题。我的时区继续保持本地时区。有没有一种优雅的方法可以将 JSON 序列化程序的时区设置为 UTC,就像spring.jackson.time-zone=UTC不幸仅适用于 UTC 的属性一样java.util.time?
小智 4
我认为您需要设置格式化程序的时区。
@Configuration
public class JacksonConfiguration {
public static final DateTimeFormatter ISO_FIXED_FORMAT =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(ZoneId.of("Z"));
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder) {
jackson2ObjectMapperBuilder.serializers(new ZonedDateTimeSerializer(ISO_FIXED_FORMAT));
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6398 次 |
| 最近记录: |