GSON analisando variável de tipo não especificada
Eu analiso a resposta JSON do servidor com a biblioteca GSON. Backend pessoal às vezes me dizem: "Nós não podemos especificar o tipo de variável em JSON por algum motivo" (antigo php, eles não sabem como fazê-lo e assim por diante e assim por diante). GSON gosta de digitar forte em seu modelo de objeto. Portanto, não posso analisar o objeto como String.
GSON espera por:
{
"service":{
"description":null,
"name":"Base",
"id":"4c7a90410529"
}
}
Mas fica (dados vazios):
"service": ""
E eu fico
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1396
Qual é a melhor prática para analisar essa resposta?
Outra questão: Como posso construir o objeto, ele pode reconhecer a variável Integer que retornou de tempos em tempos como Integer ou String? O mesmo problema no lado do servidor.
"data": "1"
ou
"data": 1
Eu sei - devemos usar tipos específicos em Java. Mas às vezes vale a pena fazer concessões,
obrigado
EDITAR: Minha solução baseada na resposta do desenvolvedor Java.
A classe ServiceDeserializer desserializa todos os objetos, dependendo do seu valor interno.
public class ServiceDeserializer implements JsonDeserializer<ServiceState>{
@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);
}
}
E meu construtor GSON com adaptador de tipo para ServiceState.
Gson gson = new GsonBuilder()
.registerTypeAdapter(ServiceState.class, new ServiceDeserializer())
.create();