定义与作用
此注解用于从请求正文中获取请求参数,给控制器形参赋值。如果控制器方法形参与请求正文中的参数名一致时,就无需使用该注解。在spring2.5之后出现。
当请求中没有参数时,RequestParam注解还能为该形参提供一个默认值。
//只能作用于方法形参上。
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
//参数名,如果方法形参与请求传递过来的参数名不一致时,就要使用该属性进行参数绑定,该属性的值要与要绑定的请求参数名一致。
@AliasFor("name")
String value() default "";
//与value属性互为别名。作用一样
@AliasFor("value")
String name() default "";
/**
* 该参数是否必须,如果true的话,当请求中没有传递该参数就报错。
*/
boolean required() default true;
/**
*默认值,当获取的不到请求中的该参数时就提供一个默认值。
*/
String defaultValue() default ValueConstants.DEFAULT_NONE;
}
@Controller
public class RequestParamController {
@RequestMapping("testRequestParam1")
public String testRequestParam1(String name,String value){
System.out.println("name = " + name);
System.out.println("value = " + value);
return "RequsetParamDemo";
}
@RequestMapping("testRequestParam2")
public String testRequestParam2(User user){
System.out.println("user = " + user);
return "RequsetParamDemo";
}
}
testRequestParam1结果:
因为请求参数与控制器形参一样,所以能够进行正常的参数绑定。
如果请求参数与控制器形参一样,不一样。
参数绑定失败。
此时就要使用RequestParam注解。
绑定成功。 这是RequestParam主要功能。
如果形参时实体类,或者不是基本类型及其包装类以及string的话,RequestParam的绑定就没有用处。要使用其他方法或者遵循springmvc约定。
使用boolean required() default true;
该属性用于标志该参数是否必须,如果为true,并且请求中没有找到该参数进行绑定就会报400错误。默认为true。
少了value1参数。
改为false。
请求成功,但是为null值,因为没有绑定到。
String defaultValue() default ValueConstants.DEFAULT_NONE;
当没有绑定到参数时,提供一个默认值。
@RequestMapping("testRequestParam3")
public String testRequestParam3( @RequestParam(name = "page",defaultValue = "1") Integer page){
System.out.println("page = " + page);
return "RequsetParamDemo";
}
请求不提供page参数。
使用默认值1
请求添加page参数
就使用请求传递的值。