首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring中使用Jackson反序列化java.time.ZoneId

在Spring中使用Jackson反序列化java.time.ZoneId
EN

Stack Overflow用户
提问于 2017-08-31 15:08:27
回答 1查看 4.5K关注 0票数 3
代码语言:javascript
复制
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime accessStart;

private ZoneId accessStartZoneId;

在Jackson中有内置模式映射器来映射包含java ZoneId的JSON请求吗?

代码语言:javascript
复制
{
  "accessStart": "2017-10-10T10:10:10.100",
  "accessStartZoneID": "Australia/Sydney"
}

我正在使用SpringBoot1.5.4 configure。如何为ZoneId配置反序列化器?它可以很好地应用于accessStart

JSON解析错误:无法构造java.time.ZoneId的实例:抽象类型需要映射到具体类型、具有自定义反序列化程序或包含其他类型信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-31 15:37:08

后退一步

我特别想知道为什么您要使用LocalDateTimeZoneId。只使用ZonedDateTime不是更容易吗?

就设计而言,ZonedDateTimeLocalDateTimeZoneId的组合。

支持ZoneId

假设您仍然希望使用ZoneId,则可以编写您自己的自定义(反)序列化程序。

或者,可以将jackson-datatype-jsr310工件添加到依赖项中:

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9</version>
</dependency>

然后在您的JavaTimeModule中注册ObjectMapper模块。

代码语言:javascript
复制
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());

在Spring应用程序中,您需要以下内容:

代码语言:javascript
复制
@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是根据文档支持的

  • ZoneIdZoneOffset,它们实际上并不存储日期和时间,但是这个模块仍然支持它们。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45984729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档