我从服务响应中获得了JSONObject。
如果出现错误,我需要将其转换为其中一个错误类。
Json就像
{"message":"This means that the userID is not valid.","name":"UserNotFoundException"}
其中name可以是模型包中的任何例外
我可以这样做吗?
Class ex = Class.forName("com.myapp.model.Exceptions." + jsonObject.getString("name"));
如何将ex转换为UserNotFoundException类,以便我可以使用它的方法,即 ex.doSomething()
答案 0 :(得分:2)
如果你真的需要这样做(虽然这通常很少这样做),请看一下反思:Java how to instantiate a class from string
答案 1 :(得分:0)
您实际上并未在代码中进行任何操作,而是使用自己的命名约定检索类实例。稍后您需要使用JSON对象中的message
创建该异常类的实例。
投射是完全不同的事情,为了获得一些理解,你可以看一下this answer。
问题是,您无法将JSON对象强制转换为Java类,就像您无法将DOM树强制转换为Java对象树一样。您可以做的(并且每个人都这样做)是将JSON对象
因此,在您的代码中,它看起来像:
Class ex = Class.forName("com.myapp.model.Exceptions." + jsonObject.getString("name"));
Constructor cons = ex.getConstructor(String.class);
UserNotFouncException unfe = (UserNotFoundException) cons.newInstance(jsonObject.getString("message")); // here is where actual casting is happening
注意:请注意,上面的代码可能会抛出您需要保护的异常。
答案 2 :(得分:0)
您可以使用GSON。它可以轻松地序列化和反序列化json数据..
供参考 - > https://code.google.com/p/google-gson/