我如何找到Java对象的结构?

时间:2011-04-12 08:39:16

标签: java http object sun

我正在使用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 个答案:

答案 0 :(得分:2)

使用Java Reflection。使用反射你可以做这样的事情

 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

答案 1 :(得分:2)

我不熟悉此API,但似乎HttpExchange.getAttribute不是用于获取POST参数的方法。相反,它是一种在一系列过滤器内共享信息的机制。由于您要实现Filters,您将记录并理解可以存储的属性。

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我也不熟悉这个API。请求POST参数应该以{{1​​}}的原始未解析形式提供。但是,如果您知道getAttribute方法将包含您需要的数据,但您不知道它将具有哪个类(我不知道如何在不知道后者的情况下知道前者,但无论如何),您可以使用反射来打印类的名称:

getResponseBody()

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

但这不应该是必要的,因为你需要的东西应该记录在某处。