一、SpringMVC对请求数据的传入处理
1、Spring MVC 通过分析处理方法的签名,HTTP请求信息绑定到处理方法的相应形参中.
2、Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名.
3、必要时可以对方法及方法入参标注相应的注解(@PathVariable 、@RequestParam、@RequestHeader 等).
4、Spring MVC 框架会将HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理.
二、@RequestParam注解
1、@RequestParam注解的作用是可以将请求参数绑定到控制器的处理方法的形参上.我们可以通过下面测试案例得出该注解的用法和作用.
2、@RequestParam注解源码
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
// name和value互为别名,无论使用name还是用value赋值都是一样的效果
@AliasFor("name")
String value() default "";
@AliasFor("value")
String name() default "";
// required的默然值是true,当请求参数与value对应的值不匹配时就会报错,如果将
// required的值设置为false时,即便请求参数中不存在于value对应的值,它也不会报错
boolean required() default true;
// 如果请求参数不存在时,可以通过该属性设置默认的值
String defaultValue() default "
ue000ue001ue002
";
}
3、浏览器发起请求
http://localhost:8080/SpringMVC/testRequestParam.jsp
4、testRequestParam.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试@RequestParam!!!</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/testRequestParam/1001" method="POST">
username: <input type="text" name="username"/><br>
password: <input type="password" name="password"/><br>
<input type="submit" value="提交">
</form>
</body>
</html>
5、浏览器页面
6、控制器
@Controller
public class SpringmvcDemo {
@RequestMapping(value = "/testRequestParam/{userId}", method = RequestMethod.POST)
public String testSpringMVC01(
//如果请求参数中存在user,那么它会将user携带的值赋值给形参name,如果不存在,在设置required=false的情况下,它会使用默认值
@RequestParam(value="user",required = false,defaultValue = "xiao mao mao!!!")String name,
// 如果请求参数中存在password,那么它会将password携带的值赋值给形参的password
@RequestParam(value = "password")Integer password,
// 将路径上的id值(1001)赋值给形参的id
@PathVariable("userId") Integer id) {
System.out.println(name);
System.out.println(password);
System.out.println(id);
return "test";
}
}
7、测试结果
// 由于请求参数中没有user,所以使用了默认值 xiao mao mao!!!
xiao mao mao!!!
12345678
1001
三、@RequestHeader注解
1、@RequestHeader注解的作用是可以将请求头中的参数信息绑定到控制器的处理方法的形参上.它的使用和@RequestHeader类似
2、@RequestHeader注解源码,该注解的属性和@RequestParam一模一样
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestHeader {
@AliasFor("name")
String value() default "";
@AliasFor("value")
String name() default "";
boolean required() default true;
String defaultValue() default "
ue000ue001ue002
";
}
3、请求参数
4、控制器
@Controller
public class SpringmvcDemo {
@RequestMapping(value = "/testRequestHeader", method = RequestMethod.GET)
public String testSpringMVC01(@RequestHeader("Accept-Encoding") String enconding, @RequestHeader("Host") String host) {
System.out.println(enconding);
System.out.println(host);
return "test";
}
}
4、测试结果
gzip, deflate, br
localhost:8080
四、@CookieValue注解
1、@CookieValue注解的作用是可以将请求头中的参数信息绑定到控制器的处理方法的形参上.它的使用和@RequestParam、@RequestHeader类似
2、@CookieValue注解源码,该注解的属性和@RequestParam、@RequestHeader一模一样
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CookieValue {
@AliasFor("name")
String value() default "";
@AliasFor("value")
String name() default "";
boolean required() default true;
String defaultValue() default "
ue000ue001ue002
";
}
3、cookie信息
4、控制器
@Controller
public class SpringmvcDemo {
@RequestMapping(value = "/testCookieValue", method = RequestMethod.GET)
public String testSpringMVC01(@CookieValue("JSESSIONID") String id) {
System.out.println(id);
return "test";
}
}
5、测试结果
4FE4771C83D28A8CD2C252FBAA8EB70D