私は HttpExchange クラスを使用しており、getAttribute 関数を使用して POST パラメーターを取得したいと考えています。関数を呼び出して結果を出力するだけで機能します。しかし、返されたオブジェクトにアクセスし、含まれているデータを取得するためのより良い方法が必要です。
どうすればオブジェクトにアクセスできますか? どのような方法がありますか?
私は HttpExchange クラスを使用しており、getAttribute 関数を使用して POST パラメーターを取得したいと考えています。関数を呼び出して結果を出力するだけで機能します。しかし、返されたオブジェクトにアクセスし、含まれているデータを取得するためのより良い方法が必要です。
どうすればオブジェクトにアクセスできますか? どのような方法がありますか?
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
私はこの API に詳しくありませんが、HttpExchange.getAttributeは、POST パラメーターを取得するために使用するメソッドではないようです。むしろ、フィルターのチェーン内で情報を共有するためのメカニズムです。Filtersを実装するので、保存できる属性を文書化して理解できます。
POST の詳細を読むには、HttpExchange.getRequestBodyを実行しませんか?
私もこのAPIに精通していません。リクエストPOSTパラメータは、から未加工の未解析の形式で利用できる必要がありますgetResponseBody()
。ただし、getAttributeメソッドに必要なデータが含まれていることはわかっていても、どのクラスが含まれるかわからない場合(後者を知らなくても前者を知る方法はわかりませんが、とにかく)、次のことができます。リフレクションを使用してクラスの名前を出力します。
System.out.println (foo.getAttribute("name").getClass ());
文書化されていない内部クラスであることが判明した場合は、使用できる公的に文書化されたクラスまたはインターフェースが見つかるまで、より多くのリフレクション(または他の手法)を使用してクラス階層を調べることができます。
ただし、必要なものはどこかに文書化する必要があるため、これは必要ありません。
HttpExchange はObject
、指定された属性名のタイプを返します。属性を取得しようとする人は、属性のタイプを知っており、オブジェクトを適切なクラスにダウンキャストできると想定されています。例 -
String attrValue = (String) httpExchangeObject.getAttribute("nameOfTheAttribute");
構造体を見つけるために、返されたオブジェクトにリフレクションを使用する必要はありません。単純なダウンキャストで目的を解決できると思います。