Dav*_*ave 12 java spring jackson spring-boot
我正在尝试从Spring应用程序输出OffsetDateTime,并在我的application.properties中有这些属性:
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
spring.jackson.date-format=yyyy-MM-dd'T'HH:mm
Run Code Online (Sandbox Code Playgroud)
但是,当返回日期时,它的格式为
"2017-01-30T16:55:00Z"
Run Code Online (Sandbox Code Playgroud)
我应该如何在Spring应用程序中正确配置日期格式?
Utk*_* A. 12
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
Run Code Online (Sandbox Code Playgroud)
通过这样做,您可以获得 ISO 8601 的 OffsetDateTime 属性,包括目标中的偏移量。
Dav*_*ave 11
所以我设法找到了解决方案,但如果您有其他选择请发布.
我最终创建了一个新的主ObjectMapperbean,并注册了一个带有自定义序列化程序的新模块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;
}
}
Run Code Online (Sandbox Code Playgroud)
添加对 jackson-modules-java8 的依赖对我有用(jackson-datatype-jsr310 已弃用)
<!-- deserialize Java 8 date time types e.g OffsetDateTime -->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-modules-java8</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我还需要添加它才能工作:
om.registerModule(new JavaTimeModule());
Run Code Online (Sandbox Code Playgroud)
不需要 write-dates-as-timestamps=false 或 om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - 适用于 Java“日期”对象。
我使用了这个注释:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
Run Code Online (Sandbox Code Playgroud)
并得到如下输出:
“时间戳”:“2020-04-23T08:00:00.000-06:00”
| 归档时间: |
|
| 查看次数: |
10516 次 |
| 最近记录: |