我正在尝试从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应用程序中正确配置日期格式?
答案 0 :(得分:8)
所以我设法找到了解决方案,但如果您有其他选择,请发布。
我最终创建了一个新的主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;
}
}
答案 1 :(得分:7)
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
这样做,您可以获得ISO 8601的OffsetDateTime属性,包括目标中的偏移量。
答案 2 :(得分:3)
添加对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>
我还需要添加它才能使其正常工作:
om.registerModule(new JavaTimeModule());
无需将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")
并获得如下输出:
“时间戳”:“ 2020-04-23T08:00:00.000-06:00”
答案 3 :(得分:2)
添加到application.properties:
spring.jackson.serialization.write-dates-as-timestamps=false
你会得到:
"lastUpdated": "2017-07-16T19:17:57.689Z"
答案 4 :(得分:1)
您是否尝试过将@JsonFormat(pattern="dd/MM/yyyy HH:mm:ss Z")
放在字段前面?
@JsonProperty("timestamp")
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm")
private OffsetDateTime timestamp;
我想你会得到:
2017-01-30'T'16:55
答案 5 :(得分:1)
spring属性对我也不起作用。不过,将属性设置为ObjectMapper
对我来说还是有用的。
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);