解析日期字符串转JSON时java.util.Date反序列化失败求助
解决方案
问题出在@JsonFormat注解指定的日期格式和输入的字符串格式完全不匹配:输入是英文月份缩写格式(如Aug 29, 2023 5:48:51 PM),但你配置的是yyyy-MM-dd HH:mm:ss.SSS,导致Jackson无法完成反序列化。
修改POJO字段的注解,使用匹配输入格式的pattern,并补充必要的时区和Locale设置:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "MMM dd, yyyy h:mm:ss a", timezone = "GMT+8", locale = "en_US") @Column(name = "createdOn") private Date createdOn;
参数说明:
pattern="MMM dd, yyyy h:mm:ss a":MMM:匹配英文月份缩写(如Aug)dd:两位日期数字yyyy:四位年份h:12小时制的小时数(对应输入里的5)a:匹配AM/PM标记
timezone:根据业务场景指定正确时区,避免解析时出现时间偏移locale="en_US":确保Jackson用英文Locale解析月份缩写,避免因默认Locale不同导致解析失败
如果你的项目使用Java 8+版本,更建议替换java.util.Date为LocalDateTime,配合@JsonFormat使用会更简洁且无时区问题:
@JsonFormat(pattern = "MMM dd, yyyy h:mm:ss a", locale = "en_US") @Column(name = "createdOn") private LocalDateTime createdOn;
内容的提问来源于stack exchange,提问作者PersonuNique
相关产品推荐
相关产品推荐

