【发布时间】:2017-12-26 02:10:57
【问题描述】:
我正在解析ZonedDateTime,使用如下:
@JsonSerialize(using = ZonedDateTimeSerializer.class)
private ZonedDateTime expirationDateTime;
我需要能够正确反序列化这个日期。但是,杰克逊没有为此提供解串器:
com.fasterxml.jackson.datatype.jsr310.deser
它丢失的原因是什么?最常见的解决方法是什么?
更新: 这是我的场景:
我这样创建ZonedDateTime:
ZonedDateTime.of(2017, 1, 1, 1, 1, 1, 1, ZoneOffset.UTC)
然后我像这样序列化包含日期的对象:
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);
}
}
当我尝试将其发送到 Spring MVC 控制器时:
mockMvc.perform(post("/endpoint/")
.content(toJSON(myObject))
.contentType(APPLICATION_JSON))
.andExpect(status().isOk());
进入控制器的日期对象不同。
之前:2017-01-01T01:01:01.000000001Z
之后:2017-01-01T01:01:01.000000001Z[UTC]
【问题讨论】:
-
Jackson 默认使用
InstantDeserializer类作为ZonedDateTime对象,所以它应该可以工作。我在这里做了一个简单的测试,它在没有任何额外配置的情况下反序列化了值。但是,如果您已经测试过但它不起作用,您可以edit 问题并将此信息添加到其中。 -
是的,等一下。
-
控制器中的脱序列码如何?您还使用对象映射器还是在 Spring 中配置?
-
Spring boot 做到了,但是,我可以看到,当我通过对象映射器将对象转换为 json 或从 json 转换时,它甚至会发生。
标签: java jaxb jackson date-parsing zoneddatetime