相关疑难解决方法(0)

使用Jackson JSR310模块反序列化LocalDateTime

我正在使用描述Jackson数据类型JSR310页面的库,但我仍然难以让它工作.

我配置了以下bean:

@Bean
@Primary
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JSR310Module());
    return mapper;
}
Run Code Online (Sandbox Code Playgroud)

当我调用我的REST API时,日期格式输出是yyyy-MM-dd'T'HH:ss.SSSSSS,例如2015-04-11T00:10:38.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_TIMEboils ISO_LOCAL_DATE'T'ISO_LOCAL_TIME,它提到它没有覆盖区域.

所以我想我应该设置DateFormatObjectMapper我创建:

@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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

java jackson jsr310 java-time

16
推荐指数
2
解决办法
3万
查看次数

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

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime accessStart;

private ZoneId accessStartZoneId;
Run Code Online (Sandbox Code Playgroud)

Jackson中是否有内置的模式映射器来映射包含java的JSON请求ZoneId

{
  "accessStart": "2017-10-10T10:10:10.100",
  "accessStartZoneID": "Australia/Sydney"
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Spring Boot 1.5.4.RELEASE.如何配置解串器ZoneId?它适用于accessStart

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

jackson spring-boot java-time

2
推荐指数
1
解决办法
2217
查看次数

标签 统计

jackson ×2

java-time ×2

java ×1

jsr310 ×1

spring-boot ×1