考虑这个使用 Spring Boot 启动的 Spring MVC 控制器:
@RequestMapping("/foo")
public Foo get() {
return new Foo();
}
public class Foo {
@Getter
@Setter
private ZonedDateTime time = ZonedDateTime.now();
}
我想用 Jackson JSR-310 模块序列化 Foo 对象。这种依赖关系在类路径上:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
我的 application.properties 中也有杰克逊配置:
spring.jackson.serialization.write-dates-as-timestamps=false
根据杰克逊文档,它应该将其转换为 ISO 日期时间格式,但我仍然得到一个时间戳值......
{
time: 1508867114.796
}
我注意到 ZonedDateTimeSerializer 内部:
@Override
public void serialize(ZonedDateTime value, JsonGenerator generator, SerializerProvider provider) throws IOException {
if (!useTimestamp(provider)) {
if (shouldWriteWithZoneId(provider)) {
// write with zone
generator.writeString(DateTimeFormatter.ISO_ZONED_DATE_TIME.format(value));
return;
}
}
super.serialize(value, generator, provider);
}
useTimestamp(provider)
被评估为true
,因此 application.properties 中的属性被忽略。
有什么想法我的代码有什么问题吗?