/**
* 可行
* http://127.0.0.1:8080/laweyecloud/springmvc/pojo1?id=1&name=hh&password=222
* @param poJo1
* @param uiModel
* @return
*/
@RequestMapping("pojo1")
public String POJOTest1(
PoJo1 poJo1,
Model uiModel
){
uiModel.addAttribute("key1", poJo1);
return "springmvc/POJO";
}
/**
* 不可行,都是null,不能自动绑定
* http://127.0.0.1:8080/laweyecloud/springmvc/pojo3?poJo1.id=1&poJo1.name=hh&poJo1.password=222&poJo2.id=22&poJo2.name=222&poJo2.fathe=hgj
* @param poJo1
* @param poJo2
* @param uiModel
* @return
*/
@RequestMapping("pojo3")
public String POJOTest3(
PoJo1 poJo1,
PoJo2 poJo2,
Model uiModel
){
uiModel.addAttribute("key1", poJo1);
uiModel.addAttribute("key2", poJo2);
return "springmvc/POJO";
}
/**
* 数据绑定流程(就是springmvc自动的将页面传入的参数,转换为方法入参对应的参数类型)
* • 1. Spring MVC 主框架将 ServletRequest 对象及目标方
法的入参实例传递给 WebDataBinderFactory 实例,以创
建 DataBinder 实例对象
• 2. DataBinder 调用装配在 Spring MVC 上下文中的
ConversionService 组件进行数据类型转换、数据格式
化工作。将 Servlet 中的请求信息填充到入参对象中
• 3. 调用 Validator 组件对已经绑定了请求消息的入参对象
进行数据合法性校验,并最终生成数据绑定结果
BindingData 对象
• 4. Spring MVC 抽取 BindingResult 中的入参对象和校验
错误对象,将它们赋给处理方法的响应入参
自定义类型转换器
• ConversionService 是 Spring 类型转换体系的核心接口。
• 可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC
容器中定义一个 ConversionService. Spring 将自动识别出
IOC 容器中的 ConversionService,并在 Bean 属性配置及
Spring MVC 处理方法入参绑定等场合使用它进行数据的转换
• 可通过 ConversionServiceFactoryBean 的 converters 属性
注册自定义的类型转换器
*/
@RequestMapping("pojo4")
public String POJOTest4(
PoJo1 poJo1,
PoJo2 poJo2,
Model uiModel
){
uiModel.addAttribute("key1", poJo1);
uiModel.addAttribute("key2", poJo2);
return "springmvc/POJO";
}
/**
* 两个参数对象被赋予相同的参数
解决办法@InitBinder
@InitBinder
• 由 @InitBinder 标识的方法,可以对 WebDataBinder 对
象进行初始化。WebDataBinder 是 DataBinder 的子类,用
于完成由表单字段到 JavaBean 属性的绑定
• @InitBinder方法不能有返回值,它必须声明为void。
• @InitBinder方法的参数通常是是 WebDataBinder
* @InitBinder
*/
@InitBinder("poJo1")
public void initPojo1(WebDataBinder binder){
binder.setIgnoreInvalidFields(true);
binder.setFieldDefaultPrefix("poJo1.");
}
@InitBinder("poJo2")
public void initPojo2(WebDataBinder binder){
binder.setIgnoreInvalidFields(true);
binder.setFieldDefaultPrefix("poJo2.");
}
@RequestMapping("DateTimeFormat")
public String DateTimeFormatTest(
DateTest dateTest
){
System.out.println(dateTest);
return "springmvc/POJO";
}
/**
* 设置日期类型自动转换
* @param binder
*/
@InitBinder
public void initDateBinder(WebDataBinder binder){
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
CustomDateEditor editor = new CustomDateEditor(format, true);
binder.registerCustomEditor(Date.class, editor);
}
@RequestMapping("valid")
public String valid(
@Valid ValidTest validTest,
BindingResult bindingResult
){
if (bindingResult.hasErrors()) {
return "springmvc/valid";
}
System.out.println(validTest);
return "springmvc/valid";
}
@RequestMapping("toRequestBodyPage")
public String toRequestBodyPage(){
return "springmvc/RequestBody";
}
package com.itrus.laweyecloud.springmvc;
public class PoJo1 {
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
private Long id;
private String name;
private String password;
}
package com.itrus.laweyecloud.springmvc;
public class PoJo2 {
private Long id;
private String name;
private String father;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFather() {
return father;
}
public void setFather(String father) {
this.father = father;
}
}