Spring中@RequestParam、@RequestBody和@PathVariable的用法詳解
@RequestParam
使用@RequestParam接收前段參數(shù)比較方便,前端傳參的URL:
url = “${ctx}/main/mm/am/edit?Id=${Id}&name=${name}”
后端使用集合來接受參數(shù),靈活性較好,如果url中沒有對(duì)參數(shù)賦key值,后端在接收時(shí),會(huì)根據(jù)參數(shù)值的類型附,賦一個(gè)初始key(String、long ……)
@RequestMapping("/edit") public String edit(Model model, @RequestParam Map<String, Object> paramMap ) { long id = Long.parseLong(paramMap.get("id").toString()); String name = paramMap.get("name").toString; return page("edit"); }
@PathVariable
使用@PathVariable接收參數(shù),參數(shù)值需要在url進(jìn)行占位,前端傳參的URL:
前臺(tái)實(shí)例:
url = “${ctx}/main/mm/am/edit/${Id}/${name}”
服務(wù)端接受:
@RequestMapping("/edit/{id}/{name}") public String edit(Model model, @PathVariable long id,@PathVariable String name) { <span class="hljs-selector-tag">return</span> <span class="hljs-selector-tag">page</span>(<span class="hljs-string">"edit"</span>); }
前端傳參的URL于后端@RequestMapping的URL必須相同且參數(shù)位置一一對(duì)應(yīng),否則前端會(huì)找不到后端地址
@RequestParam使用
先介紹一下@RequestParam的使用場(chǎng)景:
注解@RequestParam接收的參數(shù)是來自requestHeader中,即請(qǐng)求頭。通常用于GET請(qǐng)求,比如常見的url://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=唐家三少&type=已完結(jié),其在Controller 層的寫法如下圖所示:
@RequestParam有三個(gè)配置參數(shù):
- required 表示是否必須,默認(rèn)為 true,必須。
- defaultValue 可設(shè)置請(qǐng)求參數(shù)的默認(rèn)值。
- value 為接收url的參數(shù)名(相當(dāng)于key值)。
@RequestParam用來處理 Content-Type 為 application/x-www-form-urlencoded 編碼的內(nèi)容,Content-Type默認(rèn)為該屬性。
@RequestParam也可用于其它類型的請(qǐng)求,例如:POST、DELETE等請(qǐng)求。比如向表中插入單條數(shù)據(jù),但是這樣不支持批量插入數(shù)據(jù)啊,如果改用 json 字符串來傳值的話,類型設(shè)置為 application/json,點(diǎn)擊發(fā)送的話,會(huì)報(bào)錯(cuò),后臺(tái)接收不到值,為 null。
這時(shí)候,注解@RequestBody就派上用場(chǎng)了。
@RequestBody使用
先介紹一下@RequestBody的使用場(chǎng)景:
注解@RequestBody接收的參數(shù)是來自requestBody中,即請(qǐng)求體。
一般用于處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù),比如:application/json、application/xml等類型的數(shù)據(jù)。
就application/json類型的數(shù)據(jù)而言,使用注解@RequestBody可以將body里面所有的json數(shù)據(jù)傳到后端,后端再進(jìn)行解析。
舉個(gè)批量插入數(shù)據(jù)的例子,Controller層的寫法如下圖所示:
注意:前端使用$.ajax的話,一定要指定 contentType: "application/json;charset=utf-8;",默認(rèn)為 application/x-www-form-urlencoded。
@RequestBody注解一般主要是用來處理content-type:"application/json charset=utf-8"或者content-type:"application/xml charset=utf-8"兩種請(qǐng)求數(shù)據(jù),一般是異步請(qǐng)求用的比較多些,例如:
//異步請(qǐng)求部分代碼 $.ajax({ url:"/hello", type:“POST”, data:'{“id”:“123”,“name”:“chenyc”}', content-type:“application/json charset=utf-8”, success:function(data){ alert(data); } }); //@requestBody注解獲取數(shù)據(jù)代碼 @requestMapping("/hello") public String hello(@requestBody Integer id,@requestBody String name){ System.out.println(“id:”+id+";"+“name:”+name); }
此時(shí)@requestBody注解就可以獲取到請(qǐng)求中的各個(gè)參數(shù)然后賦值到相對(duì)應(yīng)的方法形參上,另外,當(dāng)有一個(gè)實(shí)體類User包含了id和name的元素的話,在方法里面直接可以寫@requestBody User user就會(huì)自動(dòng)封裝好給我們使用的了,不用麻煩像這樣@requestBody Integer id,@requestBody String name一個(gè)一個(gè)的封裝
到此這篇關(guān)于Spring中@RequestParam、@RequestBody和@PathVariable的用法詳解的文章就介紹到這了,更多相關(guān)@RequestParam、@RequestBody和@PathVariable內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
從字符串中截取等長(zhǎng)字節(jié)的Java代碼
這篇文章主要介紹了從字符串中截取等長(zhǎng)字節(jié)的Java代碼,有需要的朋友可以參考一下2013-12-12單機(jī)redis分布式鎖實(shí)現(xiàn)原理解析
這篇文章主要介紹了單機(jī)redis分布式鎖實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04spring boot整合RabbitMQ實(shí)例詳解(Fanout模式)
這篇文章主要介紹了spring boot整合RabbitMQ的實(shí)例講解(Fanout模式),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04Java之next()、nextLine()區(qū)別及問題解決
這篇文章主要介紹了Java之next()、nextLine()區(qū)別及問題解決,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08