最近項目使用postman模擬測試接口調用,get方式沒有問題。但是測試post的時候,使用request.getParameter獲取參數卻獲取不到參數。
代碼端更換了很多種寫法,都獲取不到參數信息。包括會用bean對象接口,使用@RequestParam 綁定參數入參 。
后台在debug到request詳細信息的時候 注意到request的content-type參數為multipart/form-data 。 問題就出在這個參數上,我們使用表單提交參數的時候默認的content-type為application/x-www-form-urlencoded。這種情況下使用request.getParameter可以獲取參數。Postman的body選項里面的第一個按鈕 form-data就是的conten-type 是multipart/form-data。當選擇這種類型的時候可以添加文件類型的參數。
而對於默認的表單提交需要選擇第二個選項
這時候headers 里面的Content-Type 為application/x-www-form-urlencoded 這和默認的表單提交方式是一樣的。所以修改postman的body傳參方式即可解決。
注:這個問題當時出現之后我一直以為是由於shiro框架在過濾器中把request里面的流讀取過了導致后面無法獲取參數的情況,影響了很多的排查時間。之后可以注意關注request頭信息里面的Content-Type字段。