Будет ли Gson устанавливать поле в нуль, если JSON не содержит его? - PullRequest
0 голосов
/ 03 марта 2020

У меня на самом деле есть несколько вопросов, касающихся Gson.

Первый, если Gson установит значение поля на null, когда предоставленное JSON не содержит ни одного поля, соответствующего ему.
Например, когда предоставленное JSON содержит поле name, но класс, который я десериализирую, содержит name и avatar, будет ли avatar нулевым?

Следующий вопрос в отношение к вышеупомянутому. Когда я установил бы поле с уже предопределенным значением, Gson переопределит его, даже если оно не предоставлено в JSON (переопределяет его на ноль), или оно просто проигнорирует поле и перейдет?

И, наконец, я хотел бы знать, установит ли Gson значение name, когда я буду использовать @SerializedName("username"), но JSON содержит name.
Я хочу обновить свой API, включая некоторые плохие Наименования полей JSON, но я хочу сделать его переход для людей, использующих его, как можно более плавным, поэтому я хочу по-прежнему (временно) предоставлять старое имя поля, а также обеспечивать поддержку нового. Возможно ли это, используя аннотацию @SerializedName?

Я все еще новичок в Gson, а руководство пользователя Gson не помогло мне ответить на эти два вопроса c вопросы (или я упустил это, что также было бы возможно).

1 Ответ

2 голосов
/ 04 марта 2020

Я пытался реализовать это. Вот мой код Я надеюсь, что результат в конце отвечает на ваш вопрос.

JSON используется:

{
  "name": "Robert",
  "weather": "19 deg"
}

Основной класс:

public class GSONExample2 {

    private static final String jsonStr = "JSON Mentioned above";

    public static void main(String[] args) {
        GsonDataExample root = new Gson().fromJson(jsonStr, GsonDataExample.class);
        System.out.println(root);

    }

}

POJO:

class GsonDataExample {
    @SerializedName("username")
    private String name;
    private String avatar;
    @SerializedName(value="weather", alternate = "temperature")
    private String weather;
    private String nameWithDefault = "Default name";
    // getters, setters and toString() implemented
}

Вывод:

GsonDataExample (имя = ноль, аватар = ноль, погода = 19 градусов, nameWithDefault = имя по умолчанию)

Чтобы сопоставить несколько ключей одному и тому же атрибуты, вы можете использовать @SerializedName(value="weather", alternate = "temperature"), как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...