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 参数的方法。相反,它是一种在过滤器链中共享信息的机制。由于您将实现过滤器,因此您将记录并理解可以存储的属性。

要阅读 POST 详细信息,您不会做HttpExchange.getRequestBody吗?

于 2011-04-12T08:54:36.233 回答
0

HttpExchange 返回Object给定属性名称的类型,假设尝试检索属性的人知道属性的类型,并且可以将 Object 向下转换为适当的类。例如 -

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

您不需要对返回的对象使用反射来找出结构。我觉得简单的向下转换应该可以解决目的。

于 2011-04-12T09:13:39.513 回答
0

我也不熟悉这个 API。请求 POST 参数应该以原始的、未解析的形式从getResponseBody(). 但是,如果您知道 getAttribute 方法将包含您需要的数据,但您不知道它将包含哪个类(我不知道您如何知道前者而不知道后者,但无论如何),您可以使用反射打印类的名称:

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

如果它是一个内部的、未记录的类,那么您可以使用更多的反射(或其他技术)来查看类层次结构,直到找到可以使用的公开记录的类或接口。

但这不是必需的,因为您需要的内容应该记录在某处。

于 2011-04-12T09:15:50.667 回答