web-dev-qa-db-fra.com

Définition de la valeur par défaut d'une variable lors de la désérialisation à l'aide de gson

J'essaye de convertir JSON en objet Java. Lorsqu'une certaine valeur d'une paire est null, elle doit être définie avec une valeur par défaut.

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

Exemple d'objet JSON:

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

Donc, si school est null, je devrais en faire une valeur par défaut, telle que "school":"XXX". Comment puis-je configurer ceci avec Gson lors de la désérialisation des objets?

20
Arun

Si la null est dans le JSON, Gson va remplacer les valeurs par défaut que vous pourriez définir dans le POJO. Vous pourriez prendre la peine de créer un désérialiseur personnalisé , mais cela pourrait être excessif dans ce cas.

Je pense que la chose la plus facile à faire (et sans doute la meilleure compte tenu de votre cas d'utilisation) est l'équivalent de Lazy Loading . Par exemple:

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

Note: Le gros problème de cette solution est que pour changer les valeurs par défaut, vous devez changer le code. Si vous souhaitez que la valeur par défaut soit personnalisable, vous devez utiliser le désérialiseur personnalisé comme indiqué ci-dessus.

20
durron597

Je pense que la solution consiste à écrire votre constructeur no-args pour renseigner les valeurs par défaut ou à utiliser un créateur custom instance . Le désérialiseur doit alors remplacer les valeurs par défaut de tous les attributs de l'objet JSON en cours de désérialisation.

10
Stephen C

Vous pouvez simplement créer une fonction universelle qui vérifie la valeur null

model.SchoolName= stringNullChecker(model.SchoolName);

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