2015-05-13 44 views
15

我試圖將JSON轉換爲Java對象。當一對的某個值爲null時,它應該設置一些默認值。使用gson反序列化時將默認值設置爲變量

這裏是我的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對此進行配置?

回答

7

我認爲這樣做的方法是寫你的無參數構造函數來填充默認值,或使用custom instance創建者。然後反序列化器應該替換被反序列化的JSON對象中的所有屬性的默認值。

11

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

注:這種解決方案的大問題是,爲了改變默認設置,你必須改變的代碼。如果你希望默認值是可定製的,你應該使用上面鏈接的自定義解串器。

+0

十分感謝通用功能。很好的決定 –

0

你可以簡單地做一個檢查空

model.SchoolName= stringNullChecker(model.SchoolName); 

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