fastjson反序列化自定义异常类时errorcode无法还原,主因是缺少public getter/setter、被声明为final/static或受默认策略限制;需确保其为普通字段、提供public无参构造器和setter,或启用feature.supportnonpublicfield并配合@jsonfield映射。

Fastjson 反序列化自定义异常类时,errorCode 属性无法还原,通常是因为该属性缺少 public 的 getter/setter 方法,或被声明为 final、static,或受 Fastjson 默认反序列化策略限制。要确保 errorCode 正确还原,关键在于让 Fastjson 能识别并赋值该字段。
确保 errorCode 是可访问的普通字段
Fastjson 默认只处理满足 JavaBean 规范的字段(即有 public 无参构造器 + public setter 方法),或通过开启 Feature.SupportNonPublicField 支持私有字段。若 errorCode 是 private 字段:
- 添加 public setter:如
public void setErrorCode(int errorCode) { this.errorCode = errorCode; } - 或保留 private,但反序列化时显式启用非公有字段支持:
避免使用 final 或 static 修饰 errorCode
Fastjson 无法为 final 或 static 字段赋值(即使有 setter):
- ❌ 错误写法:
private final int errorCode;或private static int errorCode; - ✅ 正确写法:
private int errorCode;(配合 setter 或开启非公有字段支持)
检查构造器和反序列化入口
自定义异常类通常继承 Exception,而 Exception 的构造器参数不包含 errorCode。Fastjson 不会调用带参构造器反序列化,而是:
- 先调用无参构造器创建实例
- 再通过字段赋值或 setter 注入 JSON 中的字段
因此,务必提供 public 无参构造器(哪怕父类已有,也建议显式写出),并确认 errorCode 字段在 JSON 中的 key 名与 Java 字段名一致(或通过 @JSONField(name = "error_code") 显式映射)。
必要时使用 @JSONField 显式控制
如果 JSON 中字段名为 error_code,而 Java 字段是 errorCode,需标注:
private int errorCode;
也可禁用智能匹配,强制按字段名严格对应:
JSON.parseObject(jsonStr, MyException.class, Feature.DisableSpecialKeyDetect);Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











