Fastjson默认不支持LocalDateTime直接反序列化,需显式配置:1.2.83+版本需启用JSR310支持(如addAccept("java.time.")或传Feature.SupportISO8601DateFormat);旧版需自定义ObjectDeserializer;Fastjson2则默认支持,无需额外配置。

Fastjson 默认不支持 LocalDateTime 的直接反序列化,因为其内部没有注册对应的序列化/反序列化器。要正确反序列化,必须显式配置日期时间类型处理器,并统一格式约定。
启用 JSR310 支持(Fastjson 1.2.83+)
新版 Fastjson 已内置对 Java 8 时间类型的处理能力,但需主动开启:
- 添加 JVM 参数:
-Dfastjson.serializer.writeJava8DateAsTimestamp=false(可选,控制是否转为时间戳) - 代码中注册全局处理器:
JSON.DEFAULT_PARSER_FEATURE |= Feature.SupportISO8601DateFormat.getMask();
或更推荐的方式:使用ParserConfig.getGlobalInstance().addAccept("java.time."); - 确保依赖版本 ≥ 1.2.83,否则部分特性不可用
指定日期格式并使用 Feature
若 JSON 中的日期是字符串(如 "2023-05-20T14:30:45"),需明确格式并启用 ISO8601 解析:
- 反序列化时传入
Feature.SupportISO8601DateFormat:JSON.parseObject(json, YourClass.class, Feature.SupportISO8601DateFormat); - 或自定义
ParserConfig并设置日期格式:ParserConfig config = new ParserConfig();<br>config.setDateFormat("yyyy-MM-dd HH:mm:ss");<br>JSON.parseObject(json, YourClass.class, config); - 注意:格式必须与 JSON 字符串严格匹配,否则抛
ParseException
自定义反序列化器(兼容旧版或特殊格式)
当需要处理非标准格式(如 "2023/05/20 14:30:45")或使用 Fastjson 1.2.80 及以下版本时,可手动注册:
- 实现
ObjectDeserializer,重写deserialze方法,用DateTimeFormatter解析 - 注册到全局配置:
ParserConfig.getGlobalInstance().putDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer()); - 示例格式器:
DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
使用 Fastjson 2(推荐长期方案)
Fastjson 2 完全重构了时间类型支持,默认识别 LocalDateTime、ZonedDateTime 等,无需额外配置:
- Maven 引入:
com.alibaba.fastjson2:fastjson2:2.0.49(以最新稳定版为准) - 直接解析即可:
JSON.parseObject(json, YourClass.class) - 默认按 ISO_LOCAL_DATE_TIME 解析,也支持通过
@JSONField(format = "...")指定字段级格式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











