2015-05-13 6 views
15

Sto tentando di convertire JSON in oggetto Java. Quando un determinato valore di una coppia è null, dovrebbe essere impostato con un valore predefinito.Impostazione del valore predefinito su una variabile durante la deserializzazione mediante gson

Ecco il mio 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; 
    } 
} 

Esempio JSON oggetto:

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

Quindi, se la scuola è null, dovrei fare questo in un valore predefinito, ad esempio "school":"XXX". Come posso configurarlo con Gson durante la deserializzazione degli oggetti?

risposta

7

Penso che il modo per farlo sia scrivere il costruttore no-args per inserire valori predefiniti o utilizzare un creatore custom instance. Il deserializzatore dovrebbe quindi sostituire i valori predefiniti per tutti gli attributi nell'oggetto JSON che viene deserializzato.

11

Se lo null è nel JSON, Gson sta per ignorare eventuali valori predefiniti che è possibile impostare nel POJO. È possibile andare a creare un custom deserializer, ma in questo caso potrebbe essere eccessivo.

Penso che la cosa più semplice da fare (e, probabilmente il migliore per il tuo caso d'uso) sia l'equivalente di Lazy Loading. Per esempio:

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

Nota: Il grosso problema di questa soluzione è che, al fine di modificare le impostazioni predefinite, è necessario modificare il codice. Se desideri che il valore predefinito sia personalizzabile, devi utilizzare il deserializzatore personalizzato come collegato sopra.

+0

grande grazie. Bella decisione –

0

Si può semplicemente fare una funzione universale che controlla nulla

model.SchoolName= stringNullChecker(model.SchoolName); 

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