我已经创建了REST服务,如果出现问题,会返回ExceptionEntity
序列化类。
如果Gson.fromJson()
应该反序列化的json属于不同类型,我想抛出一些异常。例如,我有这个字符串应该反序列化(my.ExceptionEntity.class):
{"exceptionId":2,"message":"Room aaaa already exists."}
但我使用Room
类作为此序列化字符串的类型:
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?
[编辑] 我已经测试了这个并且它不起作用:
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);
}
答案 0 :(得分:12)
根据GSon documentation,如果根据您提供的类型无法对json流进行反序列化,则会抛出异常:
抛出:
类型的对象的有效表示JsonParseException
- 如果json不是classOfT
但是这是一个未经检查的异常,如果你想提供一个自定义异常,你应该尝试使用
try {
Room r = gson.fromJson(json, Room.class);
}
catch (JsonParseException e) {
throw new YourException();
}
答案 1 :(得分:0)
首先尝试将其转换为Json,然后将其转换为所需的对象类型。
val newJson = Gson().toJson(json)
val r = gson.fromJson(json,Room.class)