在杰克逊中以ISO8601格式反序列化“ Zulu”时间

Ask*_*mov 4 java json jackson zoneddatetime

我需要使用Jackson将反序列化时间2016-11-28T10:34:25.097Z的时间反序列化为Java8的ZonedDateTime。

我相信我已经正确配置了ObjectMapper(一种工厂方法):

 @Bean
ObjectMapper getObjectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    // some other config...
    objectMapper.registerModule(new JavaTimeModule());
    return objectMapper;
}
Run Code Online (Sandbox Code Playgroud)

我在DTO的代码中有一个字段

  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private ZonedDateTime updatedAt;
Run Code Online (Sandbox Code Playgroud)

当我尝试通过杰克逊解析此内容时,我得到

 java.lang.IllegalArgumentException: Can not deserialize value of type java.time.ZonedDateTime 
 from String "2016-11-28T10:34:25.097Z": Text '2016-11-28T10:34:25.097Z' could not be parsed,
 unparsed text found at index 23  at [Source: N/A; line: -1, column: -1]  
Run Code Online (Sandbox Code Playgroud)

没有@JsonFormat的问题仍然存在。

我怎么可能克服这个问题?

pka*_*now 5

问题可能出在模式中的“ Z”。日期时间值中不允许使用文字“ Z”。尝试使用“ X”代替。

  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX")
Run Code Online (Sandbox Code Playgroud)