Spring中的WebDataBinder

来源:互联网 发布:redis安装 windows 编辑:程序博客网 时间:2024/06/14 16:03

Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型。若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数。众所周知,无论客户端传入的是什么类型的请求参数,最终都要以字节的形式传给服务端。而服务端通过Request的getParameter方法取到的参数也都是字符串形式的结果。所以,需要有一个把字符串形式的参数转换成服务端真正需要的类型的转换工具,在spring中这个转换工具为WebDataBinder。

原理图:


在我们学习servlet的时候我们知道有一个方法叫做:request.getParameter("paramName"),它返回的是一个String类型,但是如果一切都是这样子我们开发程序的时候就会显得特别麻烦,因为java引入了对象的概念,我们往往把一个表单的数据封装在一个业务中的一个javaBean对象里面,javaBean对象里面的属性会有不同类型,如:int,double,byte等等。所以需要几个东西来把String转化成服务端真正的类型,为了解决这个问题,springmvc引入了WebDataBinder。

众所周知spring可以自动将request中的数据对应到对象的每个property,会自动的bind 一些simple data (Strings, int, float, etc.) 对应到 你所要求的Object中,可是如果面对复杂的对象,那就需要借助于PropertyEditor 来帮助你完成复杂对象的对应关系,这个借口提供了两个方法,将一个property 转成string getAsText(), 另外一个方法是将string类型的值转成property对应的类型。使用起来也很简单,来个例子:

贴心的spring,提供了一种重载的方法。 for example:

 

Java代码  
  1. @InitBinder  
  2. public void bindingPreparation(WebDataBinder binder) {  
  3.   DateFormat dateFormat1 = new SimpleDateFormat("d-MM-yyyy");  
  4.   CustomDateEditor orderDateEditor = new CustomDateEditor(dateFormat1, true);  
  5.   DateFormat dateFormat2 = new SimpleDateFormat("MMM d, YYYY");  
  6.   CustomDateEditor shipDateEditor = new CustomDateEditor(dateFormat2, true);  
  7.   binder.registerCustomEditor(Date.class, "orderDate", orderDateEditor);  
  8.   binder.registerCustomEditor(Date.class, "shipDate", shipDateEditor);  
  9. }  

 

 


 
Java代码  
  1. @InitBinder  
  2. public void bindingPreparation(WebDataBinder binder) {  
  3.   DateFormat dateFormat = new SimpleDateFormat("MMM d, YYYY");  
  4.   CustomDateEditor orderDateEditor = new CustomDateEditor(dateFormat, true);  
  5.   binder.registerCustomEditor(Date.class, orderDateEditor);  

其实只要为每个变量绑定一个不同的Editor就可以了,对于不同的变量进行不同的处理。这样就能够方便的完成request 和 property 之间的binder了。