Jackson反序列化java.util.Date时日期格式解析异常求助
解决Jackson反序列化自定义日期格式问题
异常核心原因:Jackson默认支持的日期格式(如yyyy-MM-dd'T'HH:mm:ss.SSSX、EEE, dd MMM yyyy HH:mm:ss zzz等)与输入的Jul 17, 2023 12:01:45 PM格式不匹配,导致解析失败。以下是两种可行的解决方法:
方法一:在POJO字段上添加注解指定格式
直接在alarmtime字段上使用@JsonFormat注解,明确日期解析规则:
@Data @JsonIgnoreProperties(ignoreUnknown = true) public class B implements Serializable { @JsonProperty("alarmtime") @JsonFormat( pattern = "MMM dd, yyyy hh:mm:ss a", locale = "en_US", timezone = "GMT" // 根据实际时区调整,如UTC、Asia/Shanghai等 ) Date alarmtime = new Date(); }
pattern严格匹配输入的日期字符串格式:MMM对应英文月份缩写,hh是12小时制,a对应AM/PM标识locale设为en_US确保英文月份能被正确识别timezone根据输入日期的实际时区配置,避免时间偏移问题
方法二:全局配置ObjectMapper
如果多个类或字段需要使用同一种日期格式,可以全局设置ObjectMapper的日期解析器:
ObjectMapper mapper = new ObjectMapper(); SimpleDateFormat dateFormat = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a", Locale.US); mapper.setDateFormat(dateFormat); B def = mapper.readValue(doc.toString(), B.class);
注意事项
- 确保
pattern的格式符号与输入字符串完全对应,大小写敏感(如HH是24小时制,这里要用hh) - 如果项目使用Java 8+的
java.time系列日期类型(如LocalDateTime),需引入jackson-datatype-jsr310依赖,并配置DateTimeFormatter替代SimpleDateFormat
内容的提问来源于stack exchange,提问作者cokachi
相关产品推荐
相关产品推荐

