簡體   English   中英

使用gson進行反序列化時將默認值設置為變量

[英]Setting Default value to a variable when deserializing using 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配置它?

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

注意:此解決方案的一個大問題是,要更改默認值,您必須更改代碼。 如果您希望自定義默認值,則應使用上面鏈接的自定義反序列化器。

我認為這樣做的方法是編寫你的no-args構造函數來填充默認值,或者使用自定義實例創建器。 然后,反序列化器應替換要反序列化的JSON對象中所有屬性的默認值。

您可以簡單地創建一個檢查null的通用函數

model.SchoolName= stringNullChecker(model.SchoolName);

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM