Jackson日期反序列化失败:格式模式匹配问题排查
问题分析:Jackson日期反序列化失败的格式匹配问题
你的日期格式匹配模式核心问题是Locale不匹配,具体分析如下:
英文缩写解析依赖Locale
你的JSON日期字符串包含英文星期(如Thu)和月份缩写(如Feb),但Jackson默认使用系统默认Locale进行解析。如果应用运行在非英文Locale环境(比如中文),解析器无法识别这些英文缩写,就会抛出格式不匹配的异常——即使你的pattern看起来和字符串结构完全对应。时区格式本身无结构错误
你的pattern'GMT'Z中,Z在SimpleDateFormat里对应RFC 822格式的时区偏移(±HHmm),这部分本身能匹配字符串里的+0100,但因为Locale问题导致前置的英文标识解析失败,连带触发了格式异常。
解决方案
在@JsonFormat注解中显式指定英文Locale,确保解析器能正确识别英文的星期和月份缩写:
@JsonProperty("jcr:created") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z", locale = "en_US") private Date created;
如果仍有问题,可额外添加时区参数明确基准:
@JsonProperty("jcr:created") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z", locale = "en_US", timezone = "GMT") private Date created;
异常验证
从报错信息看,输入字符串Wed Sep 14 2016 15:37:40 GMT+0200与期望格式结构完全一致,本质是Locale不匹配导致解析器无法识别英文标识,而非格式字符串本身的结构错误。
内容的提问来源于stack exchange,提问作者user66875
相关产品推荐
相关产品推荐

