2015-05-13 4 views
15

Ich versuche JSON in Java-Objekt zu konvertieren. Wenn ein bestimmter Wert eines Paares null ist, sollte es mit einem Standardwert eingestellt werden.Einstellung Standardwert für eine Variable beim Deserialisieren mit Hilfe von Gson

Hier ist meine 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; 
    } 
} 

Beispiel JSON-Objekt:

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

Also, wenn Schule null ist, dass ich dies in einen Standardwert machen sollte, wie "school":"XXX". Wie kann ich dies während der Deserialisierung der Objekte mit Gson konfigurieren?

Antwort

7

Ich denke, dass die Art, dies zu tun, entweder schreiben Sie Ihre No-Args-Konstruktor, um Standardwerte zu füllen, oder verwenden Sie einen custom instance Ersteller. Der Deserializer sollte dann die Standardwerte für alle Attribute in dem zu deserialisierenden JSON-Objekt ersetzen.

11

Wenn null im JSON enthalten ist, überschreibt Gson alle Standardwerte, die Sie im POJO festlegen. Sie könnte gehen, um die Schwierigkeiten der Schaffung eines custom deserializer, aber das könnte in diesem Fall übertrieben sein.

Ich denke, die einfachste (und wohl am besten geben Sie Ihren Anwendungsfall) zu tun, ist das Äquivalent von Lazy Loading. Zum Beispiel:

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

Hinweis: Das große Problem bei dieser Lösung besteht darin, dass, um die Standardeinstellungen zu ändern, müssen Sie den Code ändern. Wenn Sie möchten, dass der Standardwert anpassbar ist, sollten Sie mit dem benutzerdefinierten Deserializer wie oben beschrieben fortfahren.

+0

großen Dank für null überprüft. Nette Entscheidung –

0

Sie können einfach eine universelle Funktion machen die

model.SchoolName= stringNullChecker(model.SchoolName); 

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