it-swarm.com.de

Festlegen des Standardwerts auf eine Variable bei der Deserialisierung mit Gson

Ich versuche, JSON in ein Java-Objekt zu konvertieren. Wenn ein bestimmter Wert eines Paares null ist, sollte ein Standardwert festgelegt werden.

Hier ist mein 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 eines JSON-Objekts:

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

Wenn die Schule null ist, sollte ich dies als Standardwert festlegen, beispielsweise "school":"XXX". Wie kann ich dies mit Gson konfigurieren, während die Objekte deserialisiert werden?

20
Arun

Wenn sich null in der JSON befindet, überschreibt Gson alle Standardeinstellungen, die Sie möglicherweise in der POJO festgelegt haben. Sie könnten sich die Mühe machen, ein benutzerdefiniertes Deserialisierungsprogramm zu erstellen, aber das könnte in diesem Fall übertrieben sein.

Ich denke, die einfachste (und in Anbetracht Ihres Anwendungsfalls wohl beste) Möglichkeit ist die Entsprechung 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 ist, dass Sie den Code ändern müssen, um die Standardeinstellungen zu ändern. Wenn Sie möchten, dass der Standardwert anpassbar ist, sollten Sie den oben verlinkten benutzerdefinierten Deserializer verwenden.

24
durron597

Ich denke, dass Sie dies tun können, indem Sie entweder Ihren no-args-Konstruktor schreiben, um die Standardwerte auszufüllen, oder einen benutzerdefinierten Instanz Ersteller verwenden. Der Deserializer sollte dann die Standardwerte für alle Attribute in dem zu deserialisierenden JSON-Objekt ersetzen.

10
Stephen C

Sie können einfach eine Universalfunktion erstellen, die auf Null prüft

model.SchoolName= stringNullChecker(model.SchoolName);

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