其他分享
首页 > 其他分享> > 使用Jackson JSR310模块对LocalDateTime进行反序列化

使用Jackson JSR310模块对LocalDateTime进行反序列化

作者:互联网

我正在使用the Jackson Datatype JSR310 page描述的库,但我仍然难以让它工作.

我配置了以下bean:

@Bean
@Primary
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JSR310Module());
    return mapper;
}

当我调用我的REST API时,日期格式输出是yyyy-MM-dd’T’HH:ss.SSSSSS,例如2015-04-11T00:10:3​​8.905847.这可以通过我的AngularJS代码处理得很好.

当我想向REST API提交内容时,日期将发布为yyyy-MM-dd’T’HH:mm:ss.SSS’Z’,例如: 2015-04-09T08:30:00.000Z

杰克逊最后一直在抱怨’Z’.如果我查看文档中的LocalDateTimeDeserializer,它使用的DateTimeFormatter.ISO_LOCAL_DATE_TIME可以归结为ISO_LOCAL_DATE’T’ISO_LOCAL_TIME,并且它提到它没有覆盖区域.

所以我想我应该在我正在创建的ObjectMapper上设置DateFormat:

@Bean
@Primary
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JSR310Module());
    mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
    return mapper;
}

但这没有任何作用.我将其更改为yyyy-MM-dd之类的简单内容,但序列化日期保留为以前的格式,反序列化也不受影响.

我在这做错了什么才能让它发挥作用?据我所知,我的JavaScript代码中的日期格式是ISO 8601格式…

解决方法:

没有必要编写自己的序列化程序.它足够使用默认的一个,但是使用另一种格式(time_zone一个)创建一个实例,以便超出部分被切断:

new LocalDateTimeDeserializer(DateTimeFormatter.ISO_DATE_TIME)

在我的情况下,我有一个这样的contextResolver来实现配置级别:

@Service 
@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {  
    private final ObjectMapper mapper;

    public ObjectMapperContextResolver() {
        mapper = new ObjectMapper();
        JavaTimeModule javaTimeModule=new JavaTimeModule();
        // Hack time module to allow 'Z' at the end of string (i.e. javascript json's) 
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_DATE_TIME));
        mapper.registerModule(javaTimeModule);
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }  
}

标签:java,jackson,java-time,jsr310
来源: https://codeday.me/bug/20191001/1840355.html