【问题标题】:Setting Default value to a variable when deserializing using gson使用 gson 反序列化时将默认值设置为变量
【发布时间】:2015-05-13 13:28:12
【问题描述】:

我正在尝试将 JSON 转换为 Java 对象。当pair的某个值为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 进行配置?

【问题讨论】:

    标签: java json gson


    【解决方案1】:

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

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

    【讨论】:

    • 您可以将默认值作为静态变量并在多个地方使用它们。因此,当您需要更改任何默认值时,只需更改 final static .. 的值
    • 好方法
    • @durron 考虑到 gson 不使用 setter/getter 访问和设置字段属性是否可能?
    【解决方案2】:

    我认为这样做的方法是编写无参数构造函数来填充默认值,或者使用custom instance 创建者。然后,反序列化程序应替换被反序列化的 JSON 对象中所有属性的默认值。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-05-31
        • 2014-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多