【发布时间】:2018-03-14 22:27:35
【问题描述】:
我正在使用 Spring 从 Web API REST API 中检索 JSON 数据,并使用 Jackson Joda 模块反序列化 ISO 日期,并将其转换为 Joda DateTime。
春季请求:
HttpEntity<?> httpEntity = new HttpEntity<>(headers);
final ResponseEntity<returnedEntities> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, EntitiesList.class);
实体有一个属性是 Joda DateTime
/**
*
* @return
* The departureDate
*/
@JsonProperty("departureDate")
public DateTime getDepartureDate() {
return departureDate;
}
/**
*
* @param departureDate
* The departureDate
*/
@JsonProperty("departureDate")
public void setDepartureDate(DateTime departureDate) {
this.departureDate = departureDate;
}
我的问题是服务器返回 JSON 的本地时间如下:
"departureDate": "2017-10-03T00:00:00+01:00",
所以上面表示 10 月 3 日,+01 表示我们处于英国夏令时,比格林威治标准时间早 1 小时。
现在 Jackson JSON 模块似乎正在剥离时区信息,有效地将时间转换为 GMT 日期时间。
所以返回的 Joda DateTime 是:
2017-10-02T23:00:00.000Z
10 月 2 日晚上 11 点,这是错误的日期。
在将 Json 转换为 Joda DateTime 时,我需要做什么才能让 Jackson Joda 模块存储 +1:00 时区?
目前我有一个香草 Joda 模块:
JodaModule jodaModule = new JodaModule();
jsonConverter.getObjectMapper().registerModule(jodaModule);
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = mappingJackson2HttpMessageConverter.getObjectMapper();
objectMapper.registerModule(jodaModule);
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = mappingJackson2HttpMessageConverter.getObjectMapper();
objectMapper.registerModule(jodaModule);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
listHttpMessageConverters.add(mappingJackson2HttpMessageConverter);
restTemplate.setMessageConverters(listHttpMessageConverters);
【问题讨论】:
标签: java spring datetime jackson jodatime