0

サービスレスポンスから JSONObject を取得しました。

エラーが発生した場合は、エラー クラスの 1 つにキャストする必要があります。

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() を使用するにはどうすればよいですか

4

3 に答える 3

2

本当にこれを行う必要がある場合 (これは通常、めったに行われないことですが)、リフレクションを見てください: Java 文字列からクラスをインスタンス化する方法

于 2013-08-06T10:40:32.927 に答える
0

コードで実際にキャストしているのではなく、独自の命名規則を使用してクラス インスタンスを取得しています。後でmessageJSON オブジェクトから を使用して、その例外クラスのインスタンスを作成する必要があります。

キャスティングはまったく別のものです。理解を深めるために、この回答を見ることができます。

問題は、DOM ツリーを Java オブジェクト ツリーにキャストできないのと同じように、JSON オブジェクトを Java クラスにキャストできないことです。あなたができること (そして誰もができること) は、JSON オブジェクトを Java クラスにマーシャリング/アンマーシャリングすることです。これは、JSON オブジェクト構造に一致する Java クラスのインスタンスを作成し、その 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

: 上記のコードは、注意が必要な例外をスローする可能性があることに注意してください。

于 2013-08-06T10:42:22.490 に答える
0

GSONを使用できます。json データを簡単にシリアライズおよびデシリアライズします。

参考までに -- > https://code.google.com/p/google-gson/

于 2013-08-06T10:43:05.477 に答える