@PathVariable 与 @PathParam 详见下面示例。
==========================写的太tm乱了看的我自己都眼晕==========================
@PathVariable
据说@PathVariable 是RSET风格的springmvc取值。
http://127.0.0.1:8080/tangyaliang
此种获取参数值的方式,需要在value中指定一个key,并且在方法参数中一定要有这个key不然报500错误
在简单点说就是@RequestMapping中有的参数名称方法中可以没有,但是方法中有的参数名称@RequestMapping一定要有。
{name}对应的@PathVariable(name = "name")中的"name",如果参数String name与地址中{name}名称相同
那么@PathVariable(name = "name")可以忽略name属性
经过我的简单测试 @PathVariable 属性name与value功能相同
required=true 地址中如果没有这个这个参数会报错,=false会忽略与@Autowired中的required功能相同
下面的例子输入结果是:Hello tangyaliangtangyaliang
@RestController
@RequestMapping("/")
public class ChineseDrugController {
@ResponseBody
@RequestMapping(value = "/{name}")
public String showName(@PathVariable String name, @PathVariable(value = "name", required = false) String sex) {
return "Hello " + name + sex;
}
}
@RestController
@RequestMapping(value = "/{sex}")
public class ChineseDrugController {
@ResponseBody
@RequestMapping(value = "/{name}")
public String showName(@PathVariable String name,@PathVariable(value = "sex",required = false) String sex) {
return "Hello " + name + " " + sex;
}
}
http:// 127.0.0.1:8080/唐/男,得到的输出是 Hello 唐 男
当看到这会想如果获得多个值应该怎么办,那就是这样了,注意show只是一个地址的标示。
@RequestMapping(value = "/{name}/{sex}/{n}/show")
public String showName(@PathVariable String name,@PathVariable String sex) {
return "Hello " + name + " " + sex;
}
@PathParam
这个注解相对简单,就是从地址栏取参数值,采用的是传统的?name=唐&sex=男。
不同的是@PathVariab在没有对应属性时会是一个null值,不会报错。
通过访问地址:http://127.0.0.1:8080/namevalue/sexvalue?name=唐&sex=男
得到的输出结果是 Hello 唐 男
@RestController
@RequestMapping(value = "/{sex}")
public class ChineseDrugController {
@ResponseBody
@RequestMapping(value = "/{name}")
public String showName(@PathVariable(value = "name") String name, @PathParam(value = "sex") String sex) {
return "Hello " + name + " " + sex;
}
}
注意在以上代码中/{sex}与/{name}可以匹配到任意根目录开始的级别例如:127.0.0.1/任意/任意。
如果带有项目名称的路径那么就是127.0.0.1/项目名称/任意/任意。所以在此演示代码中无需管它,它就是一个路径,知道含义即可。写代码时一定注意不能这么搞。