2012-12-19 68 views
2

我有一個HttpServlet試圖處理一個PUT請求,它有一些表單參數(用「application/x-www-form-urlencoded」頭文件發送)。我有相同的設置爲開機自檢工作正常,但由於某種原因,PUT請求輪番上漲emptywhen我要求的參數:從PUT HttpServletRequest獲取參數?

protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws { 
    Map<String,String[]> params = req.getParameterMap(); 
    System.out.println(params.size()); 
} 

則params的大小,即使0我傳遞參數

有沒有其他方法可以讀取PUT請求的參數?

+1

如何從客戶端做PUT?您是否使用HTML表單並使用method =「PUT」提交? –

+0

不,我使用了一個用於測試的GUI客戶端,以及簡單的CURL命令 – Nathan

+0

@Nathan你可以發佈命令嗎? – Gobliins

回答

3

見所以下面的問題,似乎回答你的問題:

Servlet parameters and doPut

+0

謝謝,從這個問題的方法絕對有效 - 如果我打印出inputStream,我會看到我傳遞的所有參數。 任何想法爲什麼抓住parameterMap將不起作用?除了設置我需要爲PUT請求所做的內容類型之外,還有什麼東西嗎? – Nathan

+0

我不確定,但我猜測這是因爲PUT方法的語義,即根據規範,PUT方法請求創建目標資源的狀態,或者用由包含在請求消息的有效載荷,所以我猜內容類型「應用程序/ x-www-form-urlencoded」對於PUT方法並沒有什麼意義。 –

1

你必須把它們放在URL作爲參數。 PUT的主體不具有POST的語義,將其解釋爲表單參數。

+0

這似乎是我的經歷。 –

+0

@PhilipRego *是*的情況,來自RFC。 – EJP

+0

你讀過RFC嗎? –

-1

你可以採取的具體與頭...

req.getHeader("nameParameter") 

你不能通過PUT/DELETE參數POST/GET。

相關問題