ISO-8601日期毫秒为0时的格式疑问:服务返回格式是否合规
这是ISO-8601的合法预期行为,并非服务异常
ISO-8601标准允许省略时间中无意义的精度部分,当毫秒数为0时,.SSS这一段确实可以被省略,两种格式(带毫秒/不带毫秒)都符合标准规范。
你现在遇到的Jackson解析失败问题,是因为硬编码了固定的日期格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z',这个模式要求必须存在毫秒部分。要解决这个问题,有两种简单的调整方式:
修改格式模式,将毫秒部分设为可选
在@JsonFormat注解里使用带可选段的模式:@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss[.SSS]Z")其中
[.SSS]表示这一段是可选的,Jackson会自动匹配带或不带毫秒的格式。直接使用Jackson的ISO-8601原生支持
如果你的项目使用JSR-310日期类型(比如Instant、LocalDateTime),可以引入JavaTimeModule并配置ObjectMapper,让它自动处理所有合法的ISO-8601格式:ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);这种方式不需要手动指定格式,Jackson会自动兼容带毫秒、不带毫秒甚至其他合法的ISO变体格式。
内容的提问来源于stack exchange,提问作者braveterry
相关产品推荐
相关产品推荐

