SpringMVC映射请求参数的方式(参数绑定方式)

   SpringMVC通过分析处理方法的签名,可以将HTTP请求信息绑定到处理方法的相应参数中。

使用@RequestParam绑定请求参数值

  在处理方法参数处使用@RequestParam可以把请求参数传递给请求方法,其中:
– value:请求参数的参数名
– required:该参数是否必须,默认为true,
– defaultValue:请求参数的默认值,表示请求参数中必须包含对应的参数,若不存在,将抛出异常。

例如:

jsp:

1
2
3
<form action="springmvc/test?userName=Jack" method="post">
<input type="submit" value="submit">
</form>

控制器:

1
2
3
4
5
6
7
8
9
10
11
12
@Controller
@RequestMapping("/springmvc")
public class SpringMVCTest {
private static final String SUCCESS = "success";
@RequestMapping("/test")
public String testRequestParam(@RequestParam(value="userName") String username) {
System.out.println(username);
return SUCCESS;
}
}

  控制器中的方法也可写为:

1
2
3
4
5
@RequestMapping("/test")
public String testRequestParam(String userName) {
System.out.println(userName);
return SUCCESS;
}

  此时方法的参数名必须与页面传来的参数名一致(都为userName),否则会获取不到。   

使用@RequestHeader绑定请求报头的属性值,使用@CookieValue绑定请求中的Cookie值(不常用,了解即可)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//使用@RequestHeader绑定请求报头的属性值
@RequestMapping("/testRequestHeader")
public String testRequestHeader(
@RequestHeader(value = "Accept-Language") String al) {
System.out.println("testRequestHeader, Accept-Language: " + al);
return SUCCESS;
}
//使用@CookieValue绑定请求中的Cookie值
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("testCookieValue: sessionId: " + sessionId);
return SUCCESS;
}

使用POJO对象绑定请求参数值(用于传递对象)

  SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如:dept.deptId、dept.address.tel等,例如:
  
POJO:

1
2
3
4
5
6
7
8
9
10
11
12
public class User {
private String userName;
private int age;
private Address address;
//get,set,toString方法略
}
public class Address{
private String province;
private String city;
//get,set,toString方法略
}

控制器:

1
2
3
4
5
6
7
8
9
10
@Controller
@RequestMapping("springmvc")
public class SpringMVCTest {
private static final String SUCCESS = "success";
@RequestMapping("/testPOJO")
public String testPOJO(User user){
System.out.println(user);
return SUCCESS;
}}

jsp:

1
2
3
4
5
6
7
<form action="springmvc/testPOJO" method="post">
username:<input type="text" name="userName"><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>

  注意,jsp中form表单数据的name值需要与POJO的字段值一致。

使用ServletAPI作为参数

  MVC 的Handler 方法可以接受如下ServletAPI类型的参数:
  
   • HttpServletRequest
   • HttpServletResponse
   • HttpSession
   • Java.security.Principal•Locale
   • InputStream
   • OutputStream
   • Reader
   • Writer
  
  例如:
  
jsp:

1
<a href="springmvc/testServletAPI">Test ServletAPI</a>

控制器:

1
2
3
4
5
6
7
8
@RequestMapping("/testServletAPI")
public void testServletAPI(HttpServletRequest request,
HttpServletResponse response, Writer out) throws IOException {
System.out.println("testServletAPI, " + request + ", " + response);
out.write("hello springmvc");
// return SUCCESS;
}
}

点击jsp页面的Test ServletAPI:

image_1b0rv5de613kekkko9u1kqr5289.png-11.6kB

并在控制台输出:

testServletAPI, org.apache.catalina.connector.RequestFacade@3277a570, org.apache.catalina.connector.ResponseFacade@4d0e75f2