我正在解析ZonedDateTime这样的用法:
@JsonSerialize(using = ZonedDateTimeSerializer.class)
private ZonedDateTime expirationDateTime;
Run Code Online (Sandbox Code Playgroud)
我需要能够正确反序列化这个日期。但是,杰克逊没有为此提供反序列化器:
com.fasterxml.jackson.datatype.jsr310.deser
Run Code Online (Sandbox Code Playgroud)
有什么原因会丢失它吗?最常见的解决方法是什么?
更新:这是我的情况:
我这样创建ZonedDateTime:
ZonedDateTime.of(2017, 1, 1, 1, 1, 1, 1, ZoneOffset.UTC)
Run Code Online (Sandbox Code Playgroud)
然后我序列化包含日期的对象,如下所示:
public static String toJSON(Object o) {
ObjectMapper objectMapper = new ObjectMapper();
StringWriter sWriter = new StringWriter();
try {
JsonGenerator jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(sWriter);
objectMapper.writeValue(jsonGenerator, o);
return sWriter.toString();
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将其发送到Spring MVC Controller时:
mockMvc.perform(post("/endpoint/")
.content(toJSON(myObject))
.contentType(APPLICATION_JSON))
.andExpect(status().isOk());
Run Code Online (Sandbox Code Playgroud)
控制器内部的日期对象不同。
之前: 2017-01-01T01:01:01.000000001Z
后: 2017-01-01T01:01:01.000000001Z[UTC]