Gson.fromJson() - jeter l'Exception si le Type est différent
J'ai créé le service REST qui renvoie ExceptionEntity
sérialisé classe comme un résultat si quelque chose va mal.
Je veux lancer une exception si json qui devrait être désérialisé par Gson.fromJson()
est de type différent. Par exemple, j'ai cette chaîne qui devrait être désérialisé (my.ExceptionEntity.class):
{"exceptionId":2,"message":"Room aaaa already exists."}
mais j'utilise Room
classe comme type de cette chaîne sérialisée:
String json = "{\"exceptionId\":2,\"message\":\"Room aaaa already exists.\"}";
Room r = gson.fromJson(json, Room.class);
//as a result r==null but I want to throw Exception; how?
[MODIFIER]
Je l'ai testé et cela ne fonctionne pas:
try {
return g.fromJson(roomJson, new TypeToken<Room>(){}.getType());
//this also doesn't work
//return g.fromJson(roomJson, Room.class);
} catch (JsonSyntaxException e) {
pepuch.multiplayergame.entity.Exception ex = g.fromJson(roomJson, pepuch.multiplayergame.entity.Exception.class);
throw ExceptionController.toGameServerException(ex);
} catch (JsonParseException e) {
pepuch.multiplayergame.entity.Exception ex = g.fromJson(roomJson, pepuch.multiplayergame.entity.Exception.class);
throw ExceptionController.toGameServerException(ex);
}
double possible de laissez-Gson lancer des exceptions sur les mauvais types
OriginalL'auteur pepuch | 2013-03-25
Vous devez vous connecter pour publier un commentaire.
Selon GSon la documentation une exception est déjà levée si le flux json ne peut pas être désérialisé selon le type que vous avez fournies:
Mais ce n'est pas cochée exception, si vous souhaitez offrir une exception personnalisée, vous devriez essayer avec
Vous pouvez essayer avec
Room r = gson.fromJson(..); if (r == null) throw new Exception(..);
Oui, vous avez raison, mais c'est faux :/ Documentation dit que ces méthodes devraient jette
JsonParseException
mais ils ne le font pas :/ je saisnull validation
est un mauvais modèle.Ce n'est pas une solution, vous ne pouvez pas le faire à l'aide de Gson..
Pas de travaux, la question github.com/google/gson/issues/188
OriginalL'auteur Jack