關於@RequestParam的使用所遇到的404問題
@RequestParam的使用所遇到的404
問題困擾:
最近在學習springmvc,但是學習到@RequestParam的使用過程中,遇到瞭以上的404報錯問題,讓我很無奈,教程的可以,為什麼我的不可以!!!此時有點煩躁!!!
問題所在及解決:
經過百度之後的說法也是一堆一堆的,最後得知是jsp頁面傳到controller類方法的形參類型不適合,jsp頁面中寫的是字符串,controller類方法的形參我寫成瞭Integer類型(畢竟id定義成瞭Integer類型的)
下面附上jsp頁面代碼圖:會發現value=”/items/editItems.action?id=’${item.id }‘“中的id為字符串有單引 號”,這是錯誤的寫法!!!
重點是這裡:正確的應該是value=”/items/editItems.action?id=${item.id }“去掉單引號即可
以下附上controller類方法圖:
下面是第一種方式:
要求形參名稱id與jsp中通過request傳過來的參數名稱一致
第二種方式:
不要求形參名稱items_id與jsp中通過request傳過來的參數名稱一致,但是需要加上聲明 @RequestParam(value=”id”)指定request傳入參數名稱和形參進行綁定
@RequestParam註解在使用過程一些註意
在項目開發過程的一些教訓經驗記錄
http接口定義如下:
@RequestMapping(value="/fetchResData",method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) void fetchResData( @RequestParam(value = "id")Long id ,@RequestParam(value = "start") String start ,@RequestParam(value = "end") String end);
請求方式為POST,Content-Type是json格式,@RequestParam的required屬性值默認是true。
客戶端在調用該接口,正常傳入參數值,但是請求沒有進入服務端設置的斷點。根據跟蹤的異常提示如下:
{
“timestamp”: 1560339674464,
“status”: 400,
“error”: “Bad Request”,
“exception”: “org.springframework.web.bind.MissingServletRequestParameterException”,
“message”: “Required Long parameter ‘id’ is not present”,
“path”: “/Service/fetchResData”
}
進一步分析客戶端的請求體信息,如果接口使用@RequestParam綁定基本數據類型情況下,請求的參數是接在URL後面,消息體是沒有數據的。而接口定義使用的consumes = MediaType.APPLICATION_JSON_VALUE。因此無法從消息體中獲取有效的參數值。從而服務端認為接口參數是必填的,而實際情況是空值。
針對上述問題的解決辦法
1、修改接口定義中
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE
等同於http中content-type為
Content-Type=mutipart/form-data和Content-Type=application/x-www-form-urlencoded
2、Post方式改為Get方式
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springboot RESTful以及參數註解的使用方式
- 關於Swagger註釋API的使用說明
- 聊聊@RequestParam,@PathParam,@PathVariable等註解的區別
- Jersey Restful接口如何獲取參數的問題
- 使用Spring處理x-www-form-urlencoded方式