@RequestParam @PathVariable @ @RequestBody的使用演示
@RequestParam
1、作用
語法:@RequestParam(value=”引數名”,required=”true/false”,defaultValue=””) value:引數名 required:是否包含該引數,預設為true,表示該請求路徑中必須包含該引數,如果不包含就報錯。 defaultValue:預設引數值,如果設定了該值,required=true將失效,自動為false,如果沒有傳該引數,就使用預設值 package com.day01springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; /** * @ Author :ShaoWei Sun. * @ Date :Created in 20:58 2018/11/16 */ @Controller @RequestMapping("hello") public class HelloController2 { /** * 接收普通請求引數 * http://localhost:8080/hello/show16?name=linuxsir * url引數中的name必須要和@RequestParam("name")一致 * @return */ @RequestMapping("show16") public ModelAndView test16(@RequestParam("name")String name){ ModelAndView mv = new ModelAndView(); mv.setViewName("hello2"); mv.addObject("msg", "接收普通的請求引數:" + name); return mv; } /** * 接收普通請求引數 * http://localhost:8080/hello/show17 * url中沒有name引數不會報錯、有就顯示出來 * @return */ @RequestMapping("show17") public ModelAndView test17(@RequestParam(value="name",required=false)String name){ ModelAndView mv = new ModelAndView(); mv.setViewName("hello2"); mv.addObject("msg", "接收普通請求引數:" + name); return mv; } /** * 接收普通請求引數 * http://localhost:8080/hello/show18?name=998 顯示為998 * http://localhost:8080/hello/show18?name 顯示為hello * @return */ @RequestMapping("show18") public ModelAndView test18(@RequestParam(value="name",required=true,defaultValue="hello")String name){ ModelAndView mv = new ModelAndView(); mv.setViewName("hello2"); mv.addObject("msg", "接收普通請求引數:" + name); return mv; } }
@PathVariable
@PathVariable("xxx")
通過 @PathVariable 可以將URL中佔位符引數{xxx}繫結到處理器類的方法形參中@PathVariable(“xxx“)
@RequestMapping(value=”user/{id}/{name}”)
請求路徑:http://localhost:8080/hello/show5/1/james
package com.day01springmvc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; /** * @ Author :ShaoWei Sun. * @ Date :Created in 20:58 2018/11/16 */ @Controller @RequestMapping("hello") public class HelloController2 { /** *3、佔位符對映 * 語法:@RequestMapping(value=”user/{userId}/{userName}”) * 請求路徑:http://localhost:8080/hello/show5/1/james * @param ids * @param names * @return */ @RequestMapping("show5/{id}/{name}") public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){ ModelAndView mv = new ModelAndView(); mv.addObject("msg","佔位符對映:id:"+ids+";name:"+names); mv.setViewName("hello2"); return mv; } }
@requestBody
1、@requestBody註解常用來處理content-type不是預設的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json型別。
2、
通過@requestBody可以將請求體中的JSON字串繫結到相應的bean上,當然,也可以將其分別繫結到對應的字串上。
例如說以下情況:
$.ajax({
url:"/login",
type:"POST",
data:'{"userName":"admin","pwd","admin123"}',
content-type:"application/json charset=utf-8",
success:function(data){
alert("request success ! ");
}
});
@requestMapping("/login")
public void login(@requestBody String userName,@requestBody String pwd){
System.out.println(userName+" :"+pwd);
}
這種情況是將JSON字串中的兩個變數的值分別賦予了兩個字串,但是呢假如我有一個User類,擁有如下欄位:
String userName;
String pwd;
那麼上述引數可以改為以下形式:@requestBody User user 這種形式會將JSON字串中的值賦予user中對應的屬性上
需要注意的是,JSON字串中的key必須對應user中的屬性名,否則是請求不過去的。
3、
在一些特殊情況@requestBody也可以用來處理content-type型別為application/x-www-form-urlcoded的內容,只不過這種方式
不是很常用,在處理這類請求的時候,@requestBody會將處理結果放到一個MultiValueMap<String,String>中,這種情況一般在
特殊情況下才會使用,
例如jQuery easyUI的datagrid請求資料的時候需要使用到這種方式、小型專案只建立一個POJO類的話也可以使用這種接受方式