我希望能夠在運行時動態地獲取傳遞給POST請求的參數,就像可以使用GET一樣完成。Java Jax-R在運行時動態獲取POST參數,如GET
我需要的參數是通過傳遞的參數之一定義的,我不知道它們在讀取之前是什麼。
實施例:
如果我傳遞給請求的參數「類型=球員」,我可以推斷,傳遞給該請求的其他PARAMS是「id」和「名」,但我不能直到我讀到「類型」參數才知道它。
在另一種情況中,參數「類型=項目」可能被傳遞,然後我可以推斷,通過其他PARAMS是「數量」和「質量」。當我使用GET時,我可以使用request.getParameter(「type」),然後理解我在找什麼其他參數(請求是HttpServletRequest)。 例如這樣做:
if (request.getParameter("type") == "player") {
doSomething(request.getParameter("id"), request.getParameter("name"))
}
else if (request.getParameter("type") == "item") {
doSomethingElse(request.getParameter("quantity"), request.getParameter("quality"))
}
然而,當我使用POST,從我讀到目前爲止,我必須定義什麼參數,我在期待事先通過。
舉例來說,如果POST消耗JSON,我會在構造函數中指定爲曾經的請求作出的JSON將被解析編譯Java對象。
由於Java對象是在編譯時定義的,我無法動態地接受和推導不同的參數。
有沒有一種方法可以動態地訪問傳遞給POST的參數,這與GET可以做到的方式相同?
感謝您的回覆。我收到以下錯誤,當我使用MultivaluedMap解決方案: com.fasterxml.jackson.databind.JsonMappingException:無法找到非混凝土地圖類型[圖式解串器;類javax.ws.rs.core.MultivaluedMap,[簡單類型,類java.lang.String] - > [集合類型;類的java.util.List,包含[簡單類型,類java.lang.String]]] 我不寫@Consumes( 「應用程序/ x WWW的形式進行了urlencoded」)雖然。當我這樣做時,即使我向請求中添加了「Accept」標頭,這也是我在類似問題中發現的錯誤,但我得到了不受支持的媒體錯誤。 –
這取決於你在發佈什麼。如果您發佈JSON,則應將@Consumes註釋發送到「application/json」,在上述情況下,我假定您正在發佈表單數據。 – Alboz
我明白了。我添加了一個@Consumes json,它看起來在有和沒有的情況下是一樣的,就好像Java在運行時推斷類型一樣。我仍然遇到錯誤,也許我沒有從正確的包中加載MultivaluedMap? com.fasterxml.jackson.databind.JsonMappingException:無法爲非具體的Map類型找到反序列化器[map type;類javax.ws.rs.core.MultivaluedMap,[簡單類型,類java.lang.String] - > [集合類型;類java.util.List,包含[簡單類型,類java.lang.String]]] –