1、使用POJO 对象绑定请求参数值
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹 配,自动为该对象填充属性值。支持级联属性。 如:dept.deptId、dept.address.tel 等
这里要注意的是,按照框架或者Spring逻辑,为POJO的对应属性填充值的时候不是看有没有这个属性,而是是否存在setXxx方法,Xxx就是对应的请求参数名的首字母大写的字符串。
测试演示使用了两个entity类,当然是为了看出级联属性的效果。
User.java
public class User {
private String username;
private String password;
private String email;
private int age;
private Address address;
// 省略set和get方法,构造器方法
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age
+ ", address=" + address + "]";
}
}
Address.java
public class Address {
private String province;
private String city;
// 省略set和get以及构造器方法
@Override
public String toString() {
return "Address [province=" + province + ", city=" + city + "]";
}
}
表单:
<form action="springmvc/testPOJOParam">
username:<input type="text" name="username"/>
<br>
password:<input type="password" name="password"/>
<br>
email:<input type="email" 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="提交">
</form>
目标方法:
@RequestMapping("/testPOJOParam")
public String testPOJOParam(User user){
System.out.println(user.toString());
return SUCCESS;
}
目标方法对应的控制器类存在注解@RequestMapping("/springmvc")
2.使用 ServletAPI 作为入参
在实际的项目开发中难免会使用到Servlet的原生API,SpringMVC支持直接使用ServletAPI 作为目标方法的入参。MVC 的 Handler 方法可以接受如下ServletAPI 类型的参数:
* HttpServletRequest
* HttpServletResponse
* HttpSession
* java.security.Principal
* Locale
* InputStream
* OutputStream
* Reader
* Writer
比较常用的大家看一眼便知,不常用的有个印象用到了再查。下面是演示代码:
@RequestMapping("/testServletAPI")
public void testServletAPI(Writer out) throws IOException{
// 测试直接在页面打印出一句话
out.write("java is good language");
}
上面的代码直接在页面打印一句话。