Разбор GSON неопределенной переменной типа
Я анализирую ответ сервера JSON с библиотекой GSON. Парни из бэкэнда иногда говорят мне:Мы можем'по какой-то причине не могу указать тип переменной в JSON (Старый PHP, они нене знаю как это сделать и тд и тп). GSON любит строгую типизацию в своей объектной модели. Так что я могу't разобрать объект как строку.
GSON ждать:
{
"service":{
"description":null,
"name":"Base",
"id":"4c7a90410529"
}
}
Но он получает (пустые данные):
"service": ""
И я получаю
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1396
Какова лучшая практика для анализа такого ответа?
Другой вопрос: как мне построить объект, он может распознавать переменную Integer, которая время от времени возвращалась как Integer или как String? Та же проблема на стороне сервера.
"data": "1"
или же
"data": 1
Я знаю - мы должны использовать определенные типы в Java. Но иногда стоит пойти на уступки,
Спасибо
РЕДАКТИРОВАТЬ: Мое решение на основе Java Developer 'ответ.
Класс ServiceDeserializer десериализует каждый объект в зависимости от его внутреннего значения.
public class ServiceDeserializer implements JsonDeserializer{
@Override
public ServiceState deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String name = "";
String uuid = "";
String description = "";
if (json.isJsonObject()) {
JsonObject obj = json.getAsJsonObject();
if (!obj.get("name").isJsonNull()) {
name = obj.get("name").getAsString();
}
if (!obj.get("uuid").isJsonNull()) {
uuid = obj.get("uuid").getAsString();
}
if (!obj.get("description").isJsonNull()) {
description = obj.get("description").getAsString();
}
}
return new ServiceState(name, uuid, description);
}
}
И мой GSON конструктор с адаптером типа для ServiceState.
Gson gson = new GsonBuilder()
.registerTypeAdapter(ServiceState.class, new ServiceDeserializer())
.create();