fastjson2默认严格匹配字段名、不序列化null/私有字段、不支持localdatetime、parsearray需typereference;应配置feature或@jsonfield适配。

JSON字符串转Java对象失败,JSON.parseObject() 报 JSONException
常见现象是传入的 JSON 字符串字段名和 Java 类字段名不匹配(比如前端用 user_name,而类里写的是 userName),Fastjson2 默认严格按驼峰命名匹配,不自动做下划线转驼峰。
解决方法不是改前端,而是配置解析器行为:
- 全局设置:
JSON.setDefaultParserFeature(JSONReader.Feature.SupportSmartMatch)—— 启用智能匹配(含下划线/驼峰互转) - 单次调用:用
JSON.parseObject(jsonStr, User.class, JSONReader.Feature.SupportSmartMatch) - 更稳妥的方式是加
@JSONField(name = "user_name")到对应字段上,明确绑定
注意:开启 SupportSmartMatch 会轻微影响性能,但比手动写 PropertyNamingStrategy 简洁得多;若服务纯内网且字段命名统一,可关掉它来提速。
序列化时某些字段没出现,JSON.toJSONString() 忽略了非 public 字段或 null 值
默认情况下,Fastjson2 只序列化 public 字段,且跳过值为 null 的字段。这不是 bug,是设计选择。
按需调整方式如下:
- 要输出
null字段:加JSONWriter.Feature.WriteNulls,例如JSON.toJSONString(obj, JSONWriter.Feature.WriteNulls) - 要序列化私有字段:加
JSONWriter.Feature.FieldBased(启用字段直写模式,绕过 getter) - 想排除某个字段?用
@JSONField(serialize = false)标注该字段
特别注意:FieldBased 模式下不会调用 getter/setter,所以带逻辑的 getter(比如计算属性)不会生效——别在 DTO 里混用业务逻辑。
遇到 java.time.LocalDateTime 序列化报错:无法识别类型
Fastjson2 默认不支持 JDK8 时间类型,直接序列化 LocalDateTime 会抛 JSONException: unsupported type。
必须显式注册处理器:
- 全局注册一次即可:
JSON.register(new LocalDateTimeCodec()) - 或单次指定格式:
JSON.toJSONString(time, JSONWriter.Feature.WriteDatesAsTimestamps)(输出时间戳) - 更常用的是定制格式:
JSON.toJSONString(time, JSONWriter.Feature.WriteDateUseDateFormat, new SimpleFormat("yyyy-MM-dd HH:mm:ss"))
别依赖默认行为——哪怕本地测试能过,上线后时区、JDK 版本差异都可能让时间字段突然变成空或乱码。
升级 Fastjson2 后原有 JSON.parseArray() 调用编译失败
Fastjson2 把泛型数组解析从 parseArray(String, Class) 改成了 parseArray(String, TypeReference),老代码直接报错。
修复很简单,但容易漏改:
- 原来:
JSON.parseArray(json, User.class) - 现在:
JSON.parseArray(json, new TypeReference<list>>() {})</list> - 如果只是临时用,也可退一步用
JSON.parseObject(json, List.class),但会丢失泛型信息,运行时强转有风险
这个改动看着小,但批量替换时容易只改了部分地方,导致部分列表解析成 LinkedHashMap,后续 get("name") 就崩了——建议 grep 全项目搜 parseArray,一并处理。
Fastjson2 的“高性能”不是白来的:它把很多兼容性开关关掉了,默认更严格、更轻量。你省下的 CPU 时间,得靠多写几个 Feature 参数和 @JSONField 来换。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











