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

时间:2015-05-13 13:28:13

标签: java json gson

我正在尝试将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
}

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

3 个答案:

答案 0 :(得分:21)

如果null在JSON中,Gson将覆盖您可能在POJO中设置的任何默认值。您可能会遇到创建custom deserializer的麻烦,但在这种情况下可能会有点过分。

我认为最简单的(并且可以说是最好的用例)事情相当于Lazy Loading。例如:

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;
}

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

答案 1 :(得分:10)

我认为执行此操作的方法是编写no-args构造函数以填充默认值,或使用custom instance创建者。然后,反序列化器应替换要反序列化的JSON对象中所有属性的默认值。

答案 2 :(得分:0)

您可以简单地创建一个检查null的通用函数

model.SchoolName= stringNullChecker(model.SchoolName);

public static String stringNullChecker(String val) {
        if (null == val) val = "";
        return val;
}