1. FastJSON的getter方法解析机制
FastJSON作为Java生态中广泛使用的高性能JSON库,其反序列化机制有个独特设计:会自动将getter方法解析为虚拟属性。这个特性在日常开发中经常引发"com.alibaba.fastjson.JSONException: set property error"异常,让不少开发者踩坑。
举个例子,假设我们有个User类:
@Data
public class User {
private String firstName;
private String lastName;
public String getUserName() {
return firstName + " " + lastName;
}
}
当用FastJSON序列化这个对象时,它会扫描所有getter方法,将getUserName()解析为userName属性。但在反序列化时,由于类中实际不存在userName字段和对应的setter方法,就会抛出异常:
com.alibaba.fastjson.JSONException: set property error, com.example.User#userName
2. 问题产生的底层原理
2.1 Java Bean规范与FastJSON的实现差异
Java Bean规范确实建议通过get/set方法访问属性,但FastJSON的实现更"激进":
- 属性探测机制:FastJSON会扫描所有public方法,只要方法名以get开头且无参数,就认为对应一个属性
- 命名转换规则:getUserName() → 去除get前缀 → 首字母小写 → userName属性
- 强制绑定:反序


8341

被折叠的 条评论
为什么被折叠?



