以前寫controller層的時候都是默認帶上 @RequestParam 的, 今天發現不加@RequestParam 也能接收到參數
下面我們來區分一下加與不加的區別
這里有兩種寫法
- @RequestMapping("/list")
- public String test(@RequestParam Long parentId) {
- }
- @RequestMapping("/list")
- public String test( Long parentId) {
- }
第一種必須帶有參數,也就是說你直接輸入localhost:8080/list 會報錯 不會執行方法 只能輸入localhost:8080/list?parentId=? 才能執行相應的方法
第二種 可帶參數也可不帶參數 就是說你輸入 localhost:8080/list 以及 localhost:8080/list?parentId=? 方法都能執行
當然你也可以設置 @RequestParam 里面的required為false(默認為true 代表必須帶參數) 這樣就跟第二種是一樣的了
如下:
- @RequestMapping("/list")
- public String test(@RequestParam(required=false) Long parentId) {
- .....
- }
當然你還可以設置里面的defaultValue的屬性
如下:
- @RequestMapping("/list")
- public String test(@RequestParam(defaultValue="0") Long parentId) {
- ...
- }
這樣在地址里面也可以不帶參數,如果帶了參數會接收,不帶參數會默認為0
里面還有一個value屬性也講一下, 前面所有的方法 傳入的參數必須為parentId 才能接收到值
但是如果你加了value屬性
- @RequestMapping("/list")
- public String test(@RequestParam(value="id") Long parentId) {
- ..
- }
這樣會用id 代替parentId 也就是說你地址里面傳入的參數名稱為id localhost:8080/list?id=? 這種