@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。

推薦閱讀: