Установка значения по умолчанию для переменной при десериализации с использованием gson

Я пытаюсь преобразовать JSON в объект Java. Когда определенное значение пары null, оно должно быть установлено с некоторым значением по умолчанию.

Вот мой 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;
    }
}

Пример объекта JSON:

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

Итак, если школа null, я должен сделать это значением по умолчанию, например "school":"XXX". Как я могу настроить это с помощью Gson при десериализации объектов?

Ответы

Ответ 1

Если null находится в JSON, Gson будет переопределять любые значения по умолчанию, которые вы можете установить в POJO. Вы могли перейти к созданию настраиваемого десериализатора, но в этом случае это может быть излишним.

Я думаю, что проще всего (и, возможно, лучше всего использовать ваш прецедент), это эквивалент Lazy Loading. Например:

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

Примечание.. Большая проблема с этим решением заключается в том, что для изменения настроек по умолчанию вам необходимо изменить код. Если вы хотите, чтобы значение по умолчанию было настраиваемым, вы должны пойти с настраиваемым десериализатором, как указано выше.

Ответ 2

Я думаю, что для этого нужно либо написать конструктор no-args, чтобы заполнить значения по умолчанию, либо использовать созданный пользовательский экземпляр. Затем десериализатор должен заменить значения по умолчанию для всех атрибутов в дескрипции объекта JSON.

Ответ 3

Вы можете просто сделать универсальную функцию, которая проверяет значение null

model.SchoolName= stringNullChecker(model.SchoolName);

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