Gson

2015-05-13 11 views
15

kullanarak seri hale getirme sırasında bir değişkene varsayılan değer ayarlama JSON'u Java nesnesine dönüştürmeye çalışıyorum. Bir çiftin belirli bir değeri null olduğunda, bazı varsayılan değerler ile ayarlanmalıdır.Gson

İşte benim POJO geçerli:

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

Örnek JSON nesnesi: Okul null ise

{ 
    "rollNo":"123", "name":"Tony", "school":null 
} 

Yani, bir varsayılan değer içine bu yapmalıdır gibi "school":"XXX". Nesneleri seri hale getirirken bunu Gson ile nasıl yapılandırabilirim?

cevap

7

Bunu yapmanın yolu, hata ayıklama yapıcınızın varsayılan değerlerini doldurması için yazmak ya da custom instance oluşturucuyu kullanmaktır. Ardından, seri hale getirici, JSON nesnesinde serileştirilmiş olan tüm özniteliklerin varsayılan değerlerini değiştirmelidir.

11

null JSON'daysa, Gson POJO'da ayarlayabileceğiniz varsayılan değerleri geçersiz kılar. , custom deserializer oluşturma zorluğuyla karşılaşırsınız, ancak bu durumda aşırı miktarda olabilir.

Bence en kolay olanı (ve kullanım durumunuza göre tartışmasız en iyisi) Lazy Loading eşdeğeridir. Örneğin:

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

Not: bu çözüm ile büyük sorun Varsayılanları değiştirmek için, kodu değiştirmek zorunda olmasıdır. Varsayılan değerin özelleştirilebilir olmasını istiyorsanız, yukarıda belirtildiği gibi özel seri hale getirici ile gitmelisiniz.

+0

büyük teşekkür denetler evrensel işlevini yapabilirsiniz. Güzel karar –

0

Sadece boş

model.SchoolName= stringNullChecker(model.SchoolName); 

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