-
Notifications
You must be signed in to change notification settings - Fork 541
Closed
Description
问题描述
在反序列化 JSON 数据时,若目标类中存在自定义 get 方法且 JSON 中字符串字段值为空字符串(""),Fastjson2 会错误地将其反序列化为 null。此行为与预期不符,且可能导致 NPE 风险。
环境信息
- OS信息: [e.g. macOS apple m1 pro 16 GB]
- JDK信息: [e.g.:Openjdk 17]
- 版本信息:[e.g.:Fastjson2 2.0.57]
重现步骤
如何操作可以重现该问题:
- 定义一个包含自定义 get 方法的类(如 SimpleTestValue)。
- 反序列化包含空字符串字段的 JSON(如 {"value": ""})。
- 观察字段值被错误转为 null。
public static void main(String[] args) {
class SimpleTestValue {
private Object value;
// 标准 getter/setter
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
// 自定义 getter 会导致问题
public List<String> getRelates() {
return List.of("1", "2");
}
}
String json = "{\"value\":\"\"}";
SimpleTestValue s = JsonUtil.fromJSON(json, SimpleTestValue.class);
System.out.println(s.getValue() == null);
}
期待的正确结果
空字符串 "" 应被反序列化为 Java 的空字符串(""),而非 null。此行为应与无自定义 get 方法时的逻辑一致。
相关日志输出
无错误日志,但反序列化结果异常:
true // s.getValue() == null
附加信息
对比测试:若移除 getRelates() 方法,反序列化结果正常(s.getValue() 为 "")。
影响范围:所有带自定义 get 方法的类均可能触发此问题。
临时解决方案:暂时避免在目标类中添加非标准 get 方法