@RequestParam(比较常用)
三个属性:
- value : 值即请求参数的参数名
- required :该参数是否必须,默认为true
- defaultValue : 请求参数的默认值
JAVA参考代码如下:
/**
* @RequestParam 来映射请求参数.
* value 值即请求参数的参数名
* required 该参数是否必须,默认为true
* dafaultValue 请求参数的默认值
*/
@RequestMapping(value = "testRequestParam")
public String testRequestParam(@RequestParam(value = "username") String username,
@RequestParam(value = "age") int age) {
System.out.println("testRequestParam + username:" + username + " age : " + age);
return SUCCESS;
}
这种形式,使用传统的URL类型,例如springmvc/testRequestParam?username=shen&age=11
。
注意点:若配置了required=false
,则一般要给予一个默认值,因为若为简单类型,如int,不赋予默认值,SpringMVC不会做拆箱操作,导致出错。(required=false,若参数类型为Integer,则参数为null,若参数类型为int,则网页请求报错,猜测:null导致拆箱失败)
@RequestHeader(不常用)
用法同@RequestParam,上代码:
/**
* 了解:
* 映射请求头信息
* 用法同@RequestParam
*/
@RequestMapping(value = "testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept-Language") String al) {
System.out.println("testRequestHeader , Accept-Language: " + al);
return SUCCESS;
}
@CookieValue
属性同@RequestParam,用法也同。
/**
* 了解:
* @CookieValue:映射一个Cookie值,属性同@RequestParam
*/
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
System.out.println("testCookieValue sessionId: " + sessionId);
return SUCCESS;
}
POJO
SpringMVC会按请求参数名
和POJO属性名
进行自动匹配,自动为该对象填充属性值。支持级联
(对象嵌套)属性,如:user.username、user.address.city等。
示例代码如下:
public class User {
private String username;
private String password;
private String email;
private int age;
private Address address;
public User() {
super();
}
public User(String username, String password, String email, int age, Address address) {
super();
this.username = username;
this.password = password;
this.email = email;
this.age = age;
this.address = address;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age
+ ", address=" + address + "]";
}
}
public class Address {
private String province;
private String city;
public Address() {
super();
}
public Address(String province, String city) {
super();
this.province = province;
this.city = city;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address [province=" + province + ", city=" + city + "]";
}
}
/**
* SpringMVC会按`请求参数名`和`POJO属性名`进行自动匹配,自动为该对象填充属性值。
* 支持级联(对象嵌套)属性,如:user.username、user.address.city等。
*/
@RequestMapping(value = "/testPojo")
public String testPojo(User user) {
System.out.println("testPojo : " + user);
return SUCCESS;
}
表单如下:
<form action="springmvc/testPojo" method="post">
username:
<input type="text" name="username" />
<br>
password:
<input type="password" name="password" />
<br>
email:
<input type="text" name="email" />
<br>
age:
<input type="text" name="age" />
<br>
province:
<input type="text" name="address.province" />
<br>
city:
<input type="text" name="address.city" />
<br>
<input type="submit" value="submit" />
</form>
其中,Controller中的方法参数为User,将会按照表单中的name自动进行赋值,支持嵌套(本例的Address)。
Servlet原生API
SpringMVC支持Servlet原生API作为方法参数,示例代码如下:
/**
* 可以使用Servlet原生的API作为目标方法的参数,具体支持以下类型
* HttpServletRequest
* HttpServletResponse
* HttpSession
* java.security.Principal
* Locale
* InputStream
* OutputStream
* Reader
* Write
*/
@RequestMapping(value = "/testServletAPI")
public void testServletAPI(HttpServletRequest request, HttpServletResponse response, Writer out)
throws IOException {
System.out.println("testServletAPI, " + request + " , " + response);
out.write("Hello SpringMVC");
// return SUCCESS;
}