我正在運行Spring 3.1.2應用程序。我有一個有很多方法的RESTful servlet。 GET方法工作的很棒(@PathVariables
匹配,響應正確編組爲JSON或基於Accept標頭的XML等)100%的時間。除非@RequestParam「required = false」,否則Spring不接受POST參數
但是,POST方法根本不起作用。經過幾個小時的轉換和其他春季方面的工作,我發現(所有修補都恢復了),我縮小了它的範圍,required
字段@RequestParam
。這是一個簡單的測試方法我一直在使用調查:
@RequestMapping (value = "/bogus",
method = POST)
public @ResponseBody PassResponse bogus (
@RequestParam (value = "test", required = false) String test) {
// Just some handy garbage objects that marshal to JSON/XML
UserResponse user = new UserResponse();
user.setName (test);
AccountDetail detail = new AccountDetail (user,null);
return new PassResponse (detail);
}
需要=假:一切正常(參數接收和解釋)。正是我期望它的工作
必需=真:(或未指定,因爲這是默認的)我一直得到消息「MissingServletRequestParameterException:String類型,必需的參數‘測試’是不存在」
客戶側視圖:
需要=真
Request URL:http://localhost:8080/internal-project/rest/bogus
Request Method:POST
Status Code:400 Bad Request
Request Headersview source
Accept:application/json
Connection:keep-alive
Content-Length:12
Host:localhost:8080
Request Payload
test=LALALAA
Response Headersview source
Connection:close
Content-Length:971
Content-Type:text/html;charset=utf-8
Date:Wed, 24 Oct 2012 18:41:05 GMT
Server:Apache-Coyote/1.1
需要=假
Request URL:http://localhost:8080/internal-project/rest/bogus
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json
Connection:keep-alive
Content-Length:12
Host:localhost:8080
Request Payload
test=LALALAA
Response Headersview source
Content-Type:application/json;charset=UTF-8
Date:Wed, 24 Oct 2012 18:44:03 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked
切換required
和我可以看到參數被傳遞時,它是完全相同的測試套件正在運行。當參數是可選的時,Spring會正確處理它。
如果有人遇到過這個或有任何想法,我很樂意聽到他們。將所需的參數標記爲可選參數,即使它有效,即使我評論它也是可怕的自我文檔。再加上這種行爲讓我有點緊張。希望我只是搞砸了某個地方...
你是對的!按照您的建議設置「Content-Type」實際上會使映射行爲標準化。我不知道爲什麼'required'字段在我未能設置時觸發了分歧行爲,但這是一個小問題。感謝您的時間! – node42