You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:52:39