SpringMVC @PathVariable的required属性

970 阅读1分钟

1.需求:

我想实现的是,发请求时,可以带name参数,此时控制层业务方法可以获取到并输出;也可以不带参数,控制层业务方法参数输出为null

2.问题:

指定required=false后,请求路径没带Restful风格参数会报404

3.Controller层代码

//获取Restful风格的请求参数
@RequestMapping(value = "/requst7/{name}")
@ResponseBody
public void request7(@PathVariable(value = "name",requried=false) String username){
    System.out.println(username);
}

4.发请求测试

不带参数发请求,会报404

image.png

带参数发请求,可以正常访问

image.png

image.png

5.分析

使用localhost/user/requst发请求和localhost/user/requst/张三发请求的映射路径是不一样的,而我的控制层映射路径只配了一个"/requst7/{name}",自然访问不到

6.解决

在@RequstMapping的value属性再配一个映射路径

@RequestMapping(value = {"/requst7/{name}","/requst7"})

此时再测试,不带参数,可以正常访问了

image.png

image.png

带参数测试,也正常,即满足了需求

image.png

image.png

7.注意

如果在此时把required改为true(默认值就是true),不带参数访问,页面会报500(但后台没有提示错误,我也不是很理解)

public void request7(@PathVariable(value = "name",required = true) String username){}

image.png

8.总结

如果想实现带Restful风格参数和不带参数都能访问,需要以下步骤

1.在@RequstMapping配置的映射路径配上带参数占位符不带参数占位符的路径

2.@PathVarible的required属性要设为false(不设的话默认为true)