@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime accessStart;
private ZoneId accessStartZoneId;在Jackson中有内置模式映射器来映射包含java ZoneId的JSON请求吗?
{
"accessStart": "2017-10-10T10:10:10.100",
"accessStartZoneID": "Australia/Sydney"
}我正在使用SpringBoot1.5.4 configure。如何为ZoneId配置反序列化器?它可以很好地应用于accessStart
JSON解析错误:无法构造java.time.ZoneId的实例:抽象类型需要映射到具体类型、具有自定义反序列化程序或包含其他类型信息。
发布于 2017-08-31 15:37:08
后退一步
我特别想知道为什么您要使用LocalDateTime和ZoneId。只使用ZonedDateTime不是更容易吗?
就设计而言,ZonedDateTime是LocalDateTime和ZoneId的组合。
支持ZoneId
假设您仍然希望使用ZoneId,则可以编写您自己的自定义(反)序列化程序。
或者,可以将jackson-datatype-jsr310工件添加到依赖项中:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9</version>
</dependency>然后在您的JavaTimeModule中注册ObjectMapper模块。
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());在Spring应用程序中,您需要以下内容:
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper createObjectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return mapper;
}
}ZoneId和ZoneOffset,它们实际上并不存储日期和时间,但是这个模块仍然支持它们。https://stackoverflow.com/questions/45984729
复制相似问题