有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jackson jsr310中缺少java ZoneDateTimeDeserializer

我正在解析一个ZonedDateTime,使用如下方式:

 @JsonSerialize(using = ZonedDateTimeSerializer.class)
 private ZonedDateTime expirationDateTime;

我需要能够正确地反序列化这个日期。但是,jackson没有为此提供反序列化程序:

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]


共 (1) 个答案

  1. # 1 楼答案

    我用这个:

            JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(ZonedDateTime.class, new ZonedDateTimeSerializer(DateTimeFormatter.ISO_DATE_TIME));
        javaTimeModule.addDeserializer(ZonedDateTime.class, InstantDeserializer.ZONED_DATE_TIME);