[alibaba/fastjson][bug] 1.2.73 get__password() 转为了 password 而低版本转为 _password

2024-09-20 930 views
8

1.2.71-1.2.73 get__password() 通过 JSON.toJSONString 转为了 password 而不是在 1.2.61 及以下转为 _password

测试用例:

public class Test2JSONString {
    public static void main(String[] args) {
        System.out.println(JSON.toJSONString(new Privacy().setPassword("test")));
    }
}

class Privacy { 
    private String phone; //手机
    private String password; //登录密码,隐藏字段

    public Privacy() {
        super();
    }

    public String getPhone() {
        return phone;
    }
    public Privacy setPhone(String phone) {
        this.phone = phone;
        return this;
    }

    public String get__password() {
        return password;
    }
    public Privacy setPassword(String password) {
        this.password = password;
        return this;
    }
}

解决方法: 用 @JSONField 指定序列化后的 JSON key 名

        @JSONField(name="_password")
    public String get__password() {
        return password;
    }

https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/boot/model/Privacy.java

回答

8

image

5

感觉不是bug, 作者截取的开始位置由 4 -> 3, 故 __password -> _password image

9

但这个和旧版表现不一致了

7

我觉得新版本的结果更合适

5

啊这,为什么不是password?javabean的规范里好像没对下划线做出过什么特殊规定,getpassword对应的字段名就是__password吧? 虽然我觉得用这种奇怪的方法名确实很操蛋~

5

感觉不是bug, 作者截取的开始位置由 4 -> 3, 故 __password -> _password image

@wenshao @ccxxjjnnbb 之所以需要加下划线,是因为 APIJSON 用 _key 的命名方式作为敏感字段隐藏起来,不返回给前端 https://github.com/Tencent/APIJSON

image