SpringMVC注解 @Requestparam 和 @PathVariable 小记
一、@Requestparam
- 作用:绑定前端请求参数到对应的Controller层中方法的形参上
- 注解参数:
1. value:参数名称,请求参数名必须与value一致,否则参数不会自动映射
2. required:被标注参数是否必须包含;默认为true,请求参数中必须包含被标注参数,否则会报错,如果是false,请求参数可以不传被标注参数,Boolean类型默认赋值为false,其他类型默认赋值为null;
3. defaultValue:设置默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用所设置的默认值; - 示例:
@RequestMapping("/test1")
public void testRequestParam1(@RequestParam String hello){
}
@RequestMapping("/test2")
public void testRequestParam2(@RequestParam(value = "HELLO",required = false) String hello){
}
@RequestMapping("/test3")
public void testRequestParam3(@RequestParam(value = "HELLO", defaultValue = "flag") String hello){
}
二、@PathVariable
- 作用:将 URL中的占位符参数{xxx}绑定到Controller控制器处理方法的形参中;
- 注解参数:
1. value:参数名称,需要跟URL中占位符名称一致;
2. required:被标注参数是否必须包含;默认为true,请求参数中必须包含被标注参数,否则会报错,如果是false,请求参数可以不传被标注参数,Boolean类型默认赋值为false,其他类型默认赋值为null(注意设置为false,需要在@RequestMapping中配置多个请求路径,示例Demo4); - 示例:
1、示例1(原始注解@PathVariable )
- Demo1中URL中的占位符名称和Controller中方法形参一致,所以可以映射成功
- Demo1示例:
@RestController
public class TestController {
@RequestMapping("/test4/{hello}/{world}")
public String testPathVariable1(@PathVariable String hello, @PathVariable String world) {
String str = "@PathVariable 占位符映射-hello:"+ hello+" world:"+world;
return str;
}
}
- Demo1结果:
2、示例2(URL占位符名称与Value名称一致)
- Demo2中URL占位符名称与Controller中方法形参名称不一致,所以需要在@PathVariable中去声明(@PathVariable中声明名称必须与URL占位符名称一致)
- Demo2示例:
@RestController
public class TestController {
@RequestMapping("/test5/{abc}/{efg}")
public String testPathVariable2(@PathVariable("abc") String hello, @PathVariable("efg") String world) {
String str = "@PathVariable 占位符映射-hello:"+ hello+" world:"+world;
return str;
}
}
- Demo2结果:
3、示例3(URL占位符名称与Value名称不一致)
- Demo3中URL占位符名称与Controller中方法形参名称不一致,并且@PathVariable中也没有进行声明,所以请求时会报错;
- Demo3示例:
@RestController
public class TestController {
@RequestMapping("/test6/{abc}/{efg}")
public String testPathVariable3(@PathVariable String hello, @PathVariable String world) {
String str = "@PathVariable 占位符映射-hello:"+ hello+" world:"+world;
return str;
}
}
- Demo3结果:
4、示例4(required = false)
- Demo4中主要是测试required = false时,配置多个请求映射路径;
- Demo4示例:
@RestController
public class TestController {
@RequestMapping(value = {"/test7/{abc}/{efg}","/test7/{abc}","/test7"})
public String testPathVariable4(@PathVariable(value = "abc",required = false) String hello,
@PathVariable(value = "efg",required = false) String world) {
String str = "@PathVariable 占位符映射-hello:"+ hello+" world:"+world;
return str;
}
}
- Demo4结果:
5、示例5(正则表达式规范请求URL)
- Demo5中主要测试在@RequestMapping()的URL中配置正则表达式规范请求参数格式;
- Demo5示例:
@RestController
public class TestController {
@RequestMapping(value = {"/test8/{abc:^[a-zA-Z]+$}/{efg}","/test8/{abc:^[a-zA-Z]+$}","/test8"})
public String testPathVariable5(@PathVariable(value = "abc",required = false) String hello,
@PathVariable(value = "efg",required = false) String world) {
String str = "@PathVariable 占位符映射-hello:"+ hello+" world:"+world;
return str;
}
}
- Demo5结果: