簡體   English   中英

如何找到Java對象的結構?

[英]How do i find out the Structure of a Java Object?

我正在使用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

如何訪問對象? 它有哪些方法?

使用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

我不熟悉此API,但看來HttpExchange.getAttribute不是您將用於獲取POST參數的方法。 而是它是一種用於在過濾器鏈內共享信息的機制。 由於您將實現Filters ,因此您將記錄並理解可以存儲的屬性。

要閱讀POST詳細信息,您是否不執行HttpExchange.getRequestBody

HttpExchange返回給定屬性名稱的Object類型。假定嘗試檢索該屬性的人知道該屬性的類型,並且可以將該對象轉換為適當的類。 例如-

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

您不需要在返回的對象上使用反射來找出結構。.我覺得簡單的向下轉換應該可以解決該問題。

我也不熟悉此API。 請求POST參數應該可以從getResponseBody()以未解析的原始格式獲得。 但是,如果您知道getAttribute方法將包含所需的數據,但是您不知道它將擁有哪個類(我不知道您怎么知道前者卻不知道后者,但是無論如何),您可以使用反射來打印類的名稱:

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

如果發現它是內部未記錄的類,則可以使用更多的反射(或其他技術)來查看類層次結構,直到找到可以使用的公開記錄的類或接口。

但這不是必需的,因為您的需求應記錄在某處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM