Установка значения по умолчанию для переменной при десериализации с использованием 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;
}