在jackson中以ISO8601格式反序列化"Zulu"时间
Deserialize "Zulu" time in ISO8601 format in jackson
我需要使用 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;
}
我的 DTO 代码中有一个字段
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private ZonedDateTime updatedAt;
当我尝试解析 Jackson 的这个时,我得到
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]
没有 @JsonFormat 问题仍然存在。
我怎么可能克服这个?
问题可能出在模式中的 'Z' 上。它不允许在日期时间值中使用文字 'Z'。请尝试 'X'。
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX")
在我的选择中,ISO 8601 的以下 JsonFormat
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
更好,因为这种格式阅读起来更直观,并且允许时区,如 ACST,UTC 偏移量为 +09:30。
我需要 serialize/deserialize ISO8601 祖鲁语格式的日期 2016-11-28T10:34:25.097Z 像你一样
我选择使用 ISO8601DateFormat 更改 ObjectMapper 中的日期格式化程序
像这样
@Bean
ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// some other config...
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.setDateFormat(new ISO8601DateFormat());
return objectMapper;
}
我需要使用 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;
}
我的 DTO 代码中有一个字段
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private ZonedDateTime updatedAt;
当我尝试解析 Jackson 的这个时,我得到
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]
没有 @JsonFormat 问题仍然存在。
我怎么可能克服这个?
问题可能出在模式中的 'Z' 上。它不允许在日期时间值中使用文字 'Z'。请尝试 'X'。
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX")
在我的选择中,ISO 8601 的以下 JsonFormat
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
更好,因为这种格式阅读起来更直观,并且允许时区,如 ACST,UTC 偏移量为 +09:30。
我需要 serialize/deserialize ISO8601 祖鲁语格式的日期 2016-11-28T10:34:25.097Z 像你一样
我选择使用 ISO8601DateFormat 更改 ObjectMapper 中的日期格式化程序
像这样
@Bean
ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// some other config...
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.setDateFormat(new ISO8601DateFormat());
return objectMapper;
}