Spring-自定义数据转换器

前面的章节我们介绍过,使用SpringMVC框架进行web开发时,前端页面传输的数据会自动封装到业务方法的参数中。此项工作是由HandlerAdapter组件完成的。


我们知道http表单中的所有请求参数都是String类型的,如果业务参数是String或者int类型,HandlerAdapter可以自动完成数据转换,但如果参数是其他数据类型,比如Date类型,HandlerAdapter是不会将String类型转换为Date类型的,我们需要实现Converter接口来协助SpringMVC完成数据类型的转换。


代码:


1.创建DateConverter转换器,实现org.springframework.core.convert.converter.Converter接口,

泛型为<String,Date>,将String类型的数值转换为Date类型。


import org.springframework.core.convert.converter.Converter;

public class DateConverter implements Converter<String,Date>{

   private String pattern;

   public DateConverter(String pattern){
       this.pattern = pattern;
   }

   public Date convert(String source) {
       // TODO Auto-generated method stub
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
       try {
           return simpleDateFormat.parse(source);
       } catch (ParseException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
       return null;
   }

}


2.springmvc.xml中配置conversionService bean

bean的类名称必须是org.springframework.context.support.ConversionServiceFactoryBean。


bean必须包含一个converters属性,它将列出在应用程序中用到的所有定制Converter。将我们自定义的DateConverter添加到converters中,

通过有参构造函数创建DateConverter。


同时annotation-driven元素的conversion-service属性赋bean名称。

    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
       <property name="converters">
           <list>
               <bean class="com.southwind.utils.DateConverter">
                   <!-- 调用有参构造函数创建bean -->
                   <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
               </bean>
           </list>
       </property>
   </bean>

   <mvc:annotation-driven conversion-service="conversionService"/>

3.创建addDate.jsp,form表单提交数据到后台。

    <form action="dateConverterTest" method="post">
       请输入日期:<input type="text" name="date"/><font style="font-size:13px">(yyyy-MM-dd)</font><br/>
       <input type="submit" value="提交"/>
   </form>

4.创建业务方法。

    @RequestMapping(value="/dateConverterTest")
   @ResponseBody
   public String dateConverterTest(Date date){
       return date.toString();
   }

5.运行代码。

成功。


除了Date类型的转换,还可以自定义数据格式,比如注册一个Student,前端页面按照"id-name-age"的形式输入String类型的数据,通过转换器,可以将该String类型的数据直接转换为Student对象。


1.创建Student实体类。

public class Student {
   private int id;
   private String name;
   private int age;

   public int getAge() {
       return age;
   }
   public void setAge(int age) {
       this.age = age;
   }
   public int getId() {
       return id;
   }
   public void setId(int id) {
       this.id = id;
   }
   public String getName() {
       return name;
   }
   public void setName(String name) {
       this.name = name;
   }
   @Override
   public String toString() {
       return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
   }

}

2.创建addStudent.jsp。

    <form action="studentConverterTest" method="post">
       学生信息:<input type="text" name="student"/><font style="font-size:13px">(id-name-age)</font><br/>
       <input type="submit" value="提交"/>
   </form>


3.创建业务方法。

    @RequestMapping(value="/studentConverterTest")
   @ResponseBody
   public String studentConverterTest(Student student){
       return student.toString();
   }


4.创建StudentConverter转换器。

import org.springframework.core.convert.converter.Converter;

import com.southwind.entity.Student;

public class StudentConverter implements Converter<String,Student>{

   public Student convert(String source) {
       // TODO Auto-generated method stub
       String[] args = source.split("-");
       Student student = new Student();
       student.setId(Integer.parseInt(args[0]));
       student.setName(args[1]);
       student.setAge(Integer.parseInt(args[2]));
       return student;
   }

}

5.springmvc.xml中配置StudentConverter转换器。


    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
       <property name="converters">
           <list>
               <!-- 日期转换器 -->
               <bean class="com.southwind.utils.DateConverter">
                   <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
               </bean>
               <!-- Student转换器 -->
               <bean class="com.southwind.utils.StudentConverter"></bean>
           </list>
       </property>
   </bean>

6.运行程序。



成功。


源码:


链接: https://pan.baidu.com/s/1ggA6mUf 

密码: b8jk


猜你喜欢

转载自blog.csdn.net/howinfun/article/details/79315073