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

Aru*_*run 23 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

示例JSON对象:

{
  "rollNo":"123", "name":"Tony", "school":null
}
Run Code Online (Sandbox Code Playgroud)

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

dur*_*597 24

如果null它在JSON中,Gson将覆盖您可能在POJO中设置的任何默认值.您可能会遇到创建自定义反序列化器的麻烦,但在这种情况下可能会有点过分.

我认为最简单的(并且可以说是最好的用例)事情就相当于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;
}
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*n C 10

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