關(guān)于@RequestParam的使用所遇到的404問題
@RequestParam的使用所遇到的404
問題困擾:
最近在學(xué)習(xí)springmvc,但是學(xué)習(xí)到@RequestParam的使用過程中,遇到了以上的404報(bào)錯(cuò)問題,讓我很無奈,教程的可以,為什么我的不可以?。。〈藭r(shí)有點(diǎn)煩躁!??!
問題所在及解決:
經(jīng)過百度之后的說法也是一堆一堆的,最后得知是jsp頁面?zhèn)鞯絚ontroller類方法的形參類型不適合,jsp頁面中寫的是字符串,controller類方法的形參我寫成了Integer類型(畢竟id定義成了Integer類型的)
下面附上jsp頁面代碼圖:會(huì)發(fā)現(xiàn)value="/items/editItems.action?id='${item.id }'"中的id為字符串有單引 號'',這是錯(cuò)誤的寫法?。。?/p>
重點(diǎn)是這里:正確的應(yīng)該是value="/items/editItems.action?id=${item.id }"去掉單引號即可
以下附上controller類方法圖:
下面是第一種方式:
要求形參名稱id與jsp中通過request傳過來的參數(shù)名稱一致
第二種方式:
不要求形參名稱items_id與jsp中通過request傳過來的參數(shù)名稱一致,但是需要加上聲明 @RequestParam(value="id")指定request傳入?yún)?shù)名稱和形參進(jìn)行綁定
@RequestParam注解在使用過程一些注意
在項(xiàng)目開發(fā)過程的一些教訓(xùn)經(jīng)驗(yàn)記錄
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屬性值默認(rèn)是true。
客戶端在調(diào)用該接口,正常傳入?yún)?shù)值,但是請求沒有進(jìn)入服務(wù)端設(shè)置的斷點(diǎn)。根據(jù)跟蹤的異常提示如下:
{
"timestamp": 1560339674464,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.web.bind.MissingServletRequestParameterException",
"message": "Required Long parameter 'id' is not present",
"path": "/Service/fetchResData"
}
進(jìn)一步分析客戶端的請求體信息,如果接口使用@RequestParam綁定基本數(shù)據(jù)類型情況下,請求的參數(shù)是接在URL后面,消息體是沒有數(shù)據(jù)的。而接口定義使用的consumes = MediaType.APPLICATION_JSON_VALUE。因此無法從消息體中獲取有效的參數(shù)值。從而服務(wù)端認(rèn)為接口參數(shù)是必填的,而實(shí)際情況是空值。
針對上述問題的解決辦法
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方式
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于rocketmq的有序消費(fèi)模式和并發(fā)消費(fèi)模式的區(qū)別說明
這篇文章主要介紹了基于rocketmq的有序消費(fèi)模式和并發(fā)消費(fèi)模式的區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06背包問題-動(dòng)態(tài)規(guī)劃java實(shí)現(xiàn)的分析與代碼
這篇文章主要給大家介紹了關(guān)于背包問題動(dòng)態(tài)規(guī)劃java實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12淺談Springboot實(shí)現(xiàn)攔截器的兩種方式
本文詳細(xì)的介紹了Springboot攔截器的兩種方式實(shí)現(xiàn),一種就是用攔截器,一種就是過濾器,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08詳解Java對象轉(zhuǎn)換神器MapStruct庫的使用
在我們?nèi)粘i_發(fā)的程序中,為了各層之間解耦,一般會(huì)定義不同的對象用來在不同層之間傳遞數(shù)據(jù)。當(dāng)在不同層之間傳輸數(shù)據(jù)時(shí),不可避免地經(jīng)常需要將這些對象進(jìn)行相互轉(zhuǎn)換。今天給大家介紹一個(gè)對象轉(zhuǎn)換工具M(jìn)apStruct,代碼簡潔安全、性能高,強(qiáng)烈推薦2022-09-09Java基于jdbc連接mysql數(shù)據(jù)庫操作示例
這篇文章主要介紹了Java基于jdbc連接mysql數(shù)據(jù)庫操作,結(jié)合完整實(shí)例形式分析了java使用jdbc連接mysql數(shù)據(jù)庫的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-07-07Java Swing組件復(fù)選框JCheckBox用法示例
這篇文章主要介紹了Java Swing組件復(fù)選框JCheckBox用法,結(jié)合具體實(shí)例形式分析了Swing復(fù)選框JCheckBox簡單用法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2017-11-11