Spring MVC通过分析控制器处理方法的签名,将 HTTP请求信息绑定到处理方法的相应人参中。除@PathVariable注解外,SpringMVC还可使用@RequestParam、@RequestHeader和@CookieValue注解分别映射请求参数、请求头和Cookie值信息到相应处理方法的入参中,并根据方法的返回值类型做出相应的后续处理。
另外,SpringMVC也支持使用POJO对象绑定请求参数,且也可以使用Servlet原生API作为目标方法的形参。
映射请求参数和请求头信息的具体实现代码下载地址:http://download.csdn.net/download/bingbeichen/9792045。
1. 使用@RequestParam注解映射请求参数信息
// 注:请求可以为springmvc/testRequestParam?username=qiaobc&age=23
/**
* 使用@RequestParam注解映射请求参数
* 1). value : 请求参数的参数名
* 2). required : 该请求参数是否为必须的,默认为true
* 3). defaultValue : 请求参数的默认值
*/
@RequestMapping("testRequestParam")
public String testRequestParam(@RequestParam("username") String userName,
@RequestParam(value="age", required=false, defaultValue="0") int age) {
System.out.println("testRequestParam: username = " + userName + ", age = " + age);
return SUCCESS;
}
2. 使用@RequestHeader注解映射请求头信息
// 注:请求可以为springmvc/testRequestHeader
/**
* 使用@RequestHeader注解映射请求头信息,用法同@RequestParam注解,了解即可
*/
@RequestMapping("testRequestHeader")
public String testRequestHeader(@RequestHeader(value="Accept-Language") String al) {
System.out.println("testRequestHeader : Accept-Language = " + al);
return SUCCESS;
}
3. 使用@CookieValue注解映射Cookie值信息
// 注:请求可以为springmvc/testCookieValue
/**
* 使用@CookieValue注解映射一个Cookie值,用法同@RequestParam注解,了解即可
*/
@RequestMapping("testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("testCookieValue : JSESSIONID = " + sessionId);
return SUCCESS;
}
4. 使用POJO对象绑定请求参数信息
<!-- 请求URL:springmvc/testPojo -->
<form action="springmvc/testPojo" method="post">
username: <input type="text" name="username" />
<br><br>
password: <input type="password" name="password" />
<br><br>
email: <input type="text" name="email" />
<br><br>
age: <input type="text" name="age" />
<br><br>
province: <input type="text" name="address.province" />
<br><br>
city: <input type="text" name="address.city" />
<br><br>
<input type="submit" value="submit" />
</form>
/**
* Spring MVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,且支持级联属性
* User类中包含username、password、email、age和address属性,而Address类中包含province和city属性
*/
@RequestMapping("testPojo")
public String testPojo(User user) {
System.out.println(user);
return SUCCESS;
}
5. 使用Servlet原生API作为目标方法的参数
/**
* 可以使用Servlet原生的API作为目标方法的参数,具体支持以下类型:
* HttpServletRequest、HttpServletResponse、HttpSession
* java.security.Principal、Locale
* InputStream、OutputStream、Reader、Writer
* 具体可在ServletHandlerMethodInvoker的resolveStandardArgument()方法中查看
*/
@RequestMapping("testServletAPI")
public String testServletAPI(HttpServletRequest request, HttpServletResponse response) {
System.out.println("testServletAPI: " + request + ", " + response);
return SUCCESS;
}