0

私は HttpExchange クラスを使用しており、getAttribute 関数を使用して POST パラメーターを取得したいと考えています。関数を呼び出して結果を出力するだけで機能します。しかし、返されたオブジェクトにアクセスし、含まれているデータを取得するためのより良い方法が必要です。

マニュアルはこちら: http://download.oracle.com/javase/6/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/HttpExchange.html#getAttribute%28java.lang.String %29

どうすればオブジェクトにアクセスできますか? どのような方法がありますか?

4

4 に答える 4

2

Java リフレクションを使用します。リフレクションを使用すると、次のようなことができます

 Class c = Class.forName("YourClassName");
   Method m[] = c.getDeclaredMethods();
   for (int i = 0; i < m.length; i++)
   System.out.println(m[i].toString()); //iterate through these methods to find out data
于 2011-04-12T08:47:47.060 に答える
2

私はこの API に詳しくありませんが、HttpExchange.getAttributeは、POST パラメーターを取得するために使用するメソッドではないようです。むしろ、フィルターのチェーン内で情報を共有するためのメカニズムです。Filtersを実装するので、保存できる属性を文書化して理解できます。

POST の詳細を読むには、HttpExchange.getRequestBodyを実行しませんか?

于 2011-04-12T08:54:36.233 に答える
0

私もこのAPIに精通していません。リクエストPOSTパラメータは、から未加工の未解析の形式で利用できる必要がありますgetResponseBody()。ただし、getAttributeメソッドに必要なデータが含まれていることはわかっていても、どのクラスが含まれるかわからない場合(後者を知らなくても前者を知る方法はわかりませんが、とにかく)、次のことができます。リフレクションを使用してクラスの名前を出力します。

System.out.println (foo.getAttribute("name").getClass ());

文書化されていない内部クラスであることが判明した場合は、使用できる公的に文書化されたクラスまたはインターフェースが見つかるまで、より多くのリフレクション(または他の手法)を使用してクラス階層を調べることができます。

ただし、必要なものはどこかに文書化する必要があるため、これは必要ありません。

于 2011-04-12T09:15:50.667 に答える
0

HttpExchange はObject、指定された属性名のタイプを返します。属性を取得しようとする人は、属性のタイプを知っており、オブジェクトを適切なクラスにダウンキャストできると想定されています。例 -

String attrValue = (String) httpExchangeObject.getAttribute("nameOfTheAttribute");

構造体を見つけるために、返されたオブジェクトにリフレクションを使用する必要はありません。単純なダウンキャストで目的を解決できると思います。

于 2011-04-12T09:13:39.513 に答える