如何使用Jackson反序列化格式为2023-01-13T08:54:25.83-03:00的LocalDateTime?
解决Jackson注解反序列化带毫秒与时区的LocalDateTime问题
你的当前注解@JsonFormat(pattern = "yyyy-MM-dd'T'hh:mm:ss")缺少毫秒和时区偏移的匹配规则,无法处理2023-01-13T08:54:25.83-03:00格式的时间字符串,以下是修正方案:
正确的注解配置
@JsonProperty("created_at") @JsonFormat( pattern = "yyyy-MM-dd'T'HH:mm:ss.SSXXX", shape = JsonFormat.Shape.STRING ) private LocalDateTime createdAt;
配置细节说明
pattern各部分对应格式:yyyy-MM-dd:匹配日期部分'T':原样匹配时间分隔符HH:24小时制小时(原格式的08为24小时制,若用hh会导致12小时制解析错误)mm:ss:匹配分秒.SS:匹配两位毫秒(对应原格式的.83)XXX:匹配时区偏移格式(对应原格式的-03:00)
- 必须确保项目引入
jackson-datatype-jsr310依赖,Jackson才能支持Java 8的LocalDateTime类型:
Maven依赖示例:
Gradle依赖示例:<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>你的Jackson版本号</version> </dependency>implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:你的Jackson版本号'
额外处理建议
如果反序列化仍报错,可在ObjectMapper中主动注册JavaTimeModule:
ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
内容的提问来源于stack exchange,提问作者Murillo Tavares
相关产品推荐
相关产品推荐

