@PathVariable和@RequestParam傳參為空問題及解決
@PathVariable和@RequestParam傳參為空
@RestController public class UserController { @GetMapping(value = {"/xie/{name}","/xie"}) public String xie(@PathVariable(value = "name",required=false) String name){ return "my name is:"+name; } @GetMapping("/xie1") public String xie1(@RequestParam(value = "name",required = false) String name){ return "my name is:"+name; } }
訪問地址:
http://localhost:8080/xie/qiao
http://localhost:8080/xie
http://localhost:8080/xie1
http://localhost:8080/xie1?name=qiao
小結一下
required = false屬性設置前端可以不傳數據,當在使用@RequestParam時直接寫上,不需要改變地址映射,當使用@PathVariable時,需要在地址映射上面寫入多個地址映射。而且必須寫required = false,不然報500
使用@pathvariable與@requestparam碰到的問題
1.@pathvariable
可以將 URL 中占位符參數綁定到控制器處理方法的入參中:URL 中的 {x} 占位符可以通過@PathVariable(“x”) 綁定到操作方法的入參中。
@GetMapping("/test/{id}") public String test(@PathVariable("id") String id){ System.out.println("test:"+id); return SUCCESS; }
可以看出使用@pathvariable註解它直接從url中取參,但是如果參數是中文就會出現亂碼情況,這時應該使用@requestparam註解
2.@requestparam
它是直接從請求中取參,它是直接拼接在url後面(demo?name=張三)
@GetMapping("/demo") public String test(@requestparam(value="name") String name){ System.out.println("test:"+name); return SUCCESS; }
註:如果參數不必須傳入的話,我們從源碼中可以看出兩者required默認為true,如圖:
所以我們可以這樣寫,隻寫一個例子
@GetMapping("/demo") public String test(@requestparam(value="name", required = false) String name){ System.out.println("test:"+name); return SUCCESS; }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 聊聊@RequestParam,@PathParam,@PathVariable等註解的區別
- 淺談@RequestParam 參數是否必須傳的問題
- Spring Boot 控制層之參數傳遞方法詳解
- SpringBoot獲取前臺參數的六種方式以及統一響應
- springboot RESTful以及參數註解的使用方式