Как узнать структуру объекта Java? - PullRequest
0 голосов
/ 12 апреля 2011

Я работаю с классом 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 ]

2 голосов
/ 12 апреля 2011

Я не знаком с этим API, но похоже, что HttpExchange.getAttribute не тот метод, который вы использовали бы для получения параметров POST.Скорее, это механизм для обмена информацией в цепочке фильтров.Поскольку вы реализуете Filters , вы должны документировать и понимать атрибуты, которые могут быть сохранены.

Чтобы прочитать подробности POST, вы бы не сделали HttpExchange.getRequestBody

2 голосов
/ 12 апреля 2011

Использование 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
0 голосов
/ 12 апреля 2011

Я тоже не знаком с этим API. Параметры запроса POST должны быть доступны в необработанном виде без разбора от getResponseBody(). Однако, если вы знаете, что метод getAttribute будет содержать нужные вам данные, но вы не знаете, какой у него будет класс (я не знаю, как вы узнали бы первый, не зная последнего, но в любом случае), вы можете используйте отражение, чтобы напечатать имя класса:

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

Если он оказывается внутренним недокументированным классом, вы можете использовать больше рефлексии (или других методов) для просмотра иерархии классов, пока не найдете публично документированный класс или интерфейс, который вы можете использовать.

Но это не обязательно, потому что то, что вам нужно, должно быть где-то задокументировано.

0 голосов
/ 12 апреля 2011

HttpExchange возвращает тип Object для данного имени атрибута. Предполагается, что тот, кто пытается извлечь атрибут, знает тип атрибута и может понижать объект до соответствующего класса. Например. -

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

вам не нужно использовать отражение в возвращаемом объекте, чтобы узнать структуру. Я чувствую, что простое понижение должно решить эту задачу.

...