使用 gson 反序列化时将默认值设置为变量

2022-09-01 17:29:08

我正在尝试将JSON转换为Java对象。当一对的某个值为 时,应该用一些默认值来设置它。null

这是我的POJO

public class Student {      
    String rollNo;
    String name;
    String contact;
    String school;

    public String getRollNo() {
        return rollNo;
    }
    public void setRollNo(String rollNo) {
        this.rollNo = rollNo;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }
}

示例 JSON 对象:

{
  "rollNo":"123", "name":"Tony", "school":null
}

因此,如果学校是,我应该将其设置为默认值,例如.如何在反序列化对象时使用Gson进行配置?null"school":"XXX"


答案 1

如果 在 JSON 中,Gson 将覆盖您可能在 POJO 中设置的任何默认值。您可能会遇到创建自定义反序列化程序的麻烦,但在这种情况下,这可能有些大材小用。null

我认为最简单的(并且根据您的用例可以说是最好的)事情相当于延迟加载。例如:

private static final String DEFAULT_SCHOOL = "ABC Elementary";
public String getSchool() {
    if (school == null) school == DEFAULT_SCHOOL;
    return school;
}
public void setSchool(String school) {
    if (school == null) this.school = DEFAULT_SCHOOL;
    else this.school = school;
}

注意:此解决方案的最大问题是,为了更改默认值,您必须更改代码。如果希望默认值可自定义,则应使用上面链接的自定义反序列化程序。


答案 2

我认为这样做的方法是编写no-args构造函数来填充默认值,或者使用自定义实例创建器。然后,反序列化程序应替换要反序列化的 JSON 对象中所有属性的默认值。