深入解析Fastjson的反序列化大小写问题---你可能没有注意过

Fastjson在反序列化JSON到JavaBean时,默认情况下不会区分JSON中的key和JavaBean中属性名称的大小写。

public class User {
    private String username;
}

String jsonString = "{\"userName\":\"JohnDoe\"}";
User user = JSON.parseObject(jsonString, User.class);
// 反序列化成功,尽管JSON中的key是"userName",而JavaBean中的属性是"username"

当JavaBean中同时定义了username和userName属性时,Fastjson会将JSON中的userName映射到JavaBean中的userName属性,而username属性将保持无值状态。

public class User {
    private String username;
    private String userName;

    // getter 和 setter 省略
}

String jsonString = "{\"userName\":\"JohnDoe\"}";
User user = JSON.parseObject(jsonString, User.class);
// 反序列化后,user.userName == "JohnDoe",而user.username 为 null

FastJson提供了注解@JSONField注解:通过在JavaBean的属性上使用@JSONField注解,可以明确指定JSON中的key,确保正确的属性被赋值。

import com.alibaba.fastjson.annotation.JSONField;

public class User {
    @JSONField(name = "userName")
    private String username;
    // 其他属性和方法
}

大家注意这个问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容