Spring中@RequestParam、@RequestBody和@PathVariable的用法詳解
@RequestParam
使用@RequestParam接收前段參數比較方便,前端傳參的URL:
url = “${ctx}/main/mm/am/edit?Id=${Id}&name=${name}”
后端使用集合來接受參數,靈活性較好,如果url中沒有對參數賦key值,后端在接收時,會根據參數值的類型附,賦一個初始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接收參數,參數值需要在url進行占位,前端傳參的URL:
前臺實例:
url = “${ctx}/main/mm/am/edit/${Id}/${name}”服務端接受:
@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必須相同且參數位置一一對應,否則前端會找不到后端地址
@RequestParam使用
先介紹一下@RequestParam的使用場景:
注解@RequestParam接收的參數是來自requestHeader中,即請求頭。通常用于GET請求,比如常見的url://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=唐家三少&type=已完結,其在Controller 層的寫法如下圖所示:

@RequestParam有三個配置參數:
- required 表示是否必須,默認為 true,必須。
- defaultValue 可設置請求參數的默認值。
- value 為接收url的參數名(相當于key值)。
@RequestParam用來處理 Content-Type 為 application/x-www-form-urlencoded 編碼的內容,Content-Type默認為該屬性。
@RequestParam也可用于其它類型的請求,例如:POST、DELETE等請求。比如向表中插入單條數據,但是這樣不支持批量插入數據啊,如果改用 json 字符串來傳值的話,類型設置為 application/json,點擊發(fā)送的話,會報錯,后臺接收不到值,為 null。
這時候,注解@RequestBody就派上用場了。
@RequestBody使用
先介紹一下@RequestBody的使用場景:
注解@RequestBody接收的參數是來自requestBody中,即請求體。
一般用于處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數據,比如:application/json、application/xml等類型的數據。
就application/json類型的數據而言,使用注解@RequestBody可以將body里面所有的json數據傳到后端,后端再進行解析。
舉個批量插入數據的例子,Controller層的寫法如下圖所示:

注意:前端使用$.ajax的話,一定要指定 contentType: "application/json;charset=utf-8;",默認為 application/x-www-form-urlencoded。
@RequestBody注解一般主要是用來處理content-type:"application/json charset=utf-8"或者content-type:"application/xml charset=utf-8"兩種請求數據,一般是異步請求用的比較多些,例如:
//異步請求部分代碼
$.ajax({
url:"/hello",
type:“POST”,
data:'{“id”:“123”,“name”:“chenyc”}',
content-type:“application/json charset=utf-8”,
success:function(data){
alert(data);
}
});
//@requestBody注解獲取數據代碼
@requestMapping("/hello")
public String hello(@requestBody Integer id,@requestBody String name){
System.out.println(“id:”+id+";"+“name:”+name);
}此時@requestBody注解就可以獲取到請求中的各個參數然后賦值到相對應的方法形參上,另外,當有一個實體類User包含了id和name的元素的話,在方法里面直接可以寫@requestBody User user就會自動封裝好給我們使用的了,不用麻煩像這樣@requestBody Integer id,@requestBody String name一個一個的封裝
到此這篇關于Spring中@RequestParam、@RequestBody和@PathVariable的用法詳解的文章就介紹到這了,更多相關@RequestParam、@RequestBody和@PathVariable內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- springboot中@RequestParam和@PathVariable區(qū)別
- SpringBoot中@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用詳解
- Spring中@PathVariable和@RequestParam注解的用法區(qū)別
- Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解
- @PathVariable、@RequestParam和@RequestBody的區(qū)別
- 方法參數屬性params,@PathVariable和@RequestParam用法及區(qū)別
- @PathVariable和@RequestParam傳參為空問題及解決
- 使用@pathvariable與@requestparam碰到的一些問題及解決
- 聊聊@RequestParam,@PathParam,@PathVariable等注解的區(qū)別
- Java中@PathVariable 和 @RequestParam的區(qū)別小結
相關文章
詳解java.lang.reflect.Modifier.isInterface()方法
這篇文章主要介紹了詳解java.lang.reflect.Modifier.isInterface()方法的相關資料,這里提供實例幫助大家理解這個方法的使用,需要的朋友可以參考下2017-09-09
Java語言實現(xiàn)簡單FTP軟件 FTP軟件效果圖預覽之下載功能(2)
這篇文章主要為大家詳細介紹了Java語言實現(xiàn)簡單FTP軟件,F(xiàn)TP軟件效果圖預覽之下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Set接口深入剖析之HashSet、LinkedHashSet和TreeSet
這篇文章主要介紹了Set接口深入剖析之HashSet、LinkedHashSet和TreeSet,LinkedHashSet是HashSet的子類,實現(xiàn)了Set接口,LinkedHashSet底層是一個LinkedHashMap,底層維護了一個數組+雙向鏈表,需要的朋友可以參考下2023-09-09

