我正在使用 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 参数的方法。相反,它是一种在过滤器链中共享信息的机制。由于您将实现过滤器,因此您将记录并理解可以存储的属性。
要阅读 POST 详细信息,您不会做HttpExchange.getRequestBody吗?
HttpExchange 返回Object
给定属性名称的类型,假设尝试检索属性的人知道属性的类型,并且可以将 Object 向下转换为适当的类。例如 -
String attrValue = (String) httpExchangeObject.getAttribute("nameOfTheAttribute");
您不需要对返回的对象使用反射来找出结构。我觉得简单的向下转换应该可以解决目的。
我也不熟悉这个 API。请求 POST 参数应该以原始的、未解析的形式从getResponseBody()
. 但是,如果您知道 getAttribute 方法将包含您需要的数据,但您不知道它将包含哪个类(我不知道您如何知道前者而不知道后者,但无论如何),您可以使用反射打印类的名称:
System.out.println (foo.getAttribute("name").getClass ());
如果它是一个内部的、未记录的类,那么您可以使用更多的反射(或其他技术)来查看类层次结构,直到找到可以使用的公开记录的类或接口。
但这不是必需的,因为您需要的内容应该记录在某处。