SpringMVC学习(5):自定义数据转换器

前言

在前面的章节我们学习过使用SpringMVC框架进行web开发,前端页面传输的数据会由HandlerAdapter组件自动封装到业务方法的参数中。

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

实现

1、创建DateConverter转换器

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;
    }

}

DateConverter转换器实现了org.springframework.core.convert.converter.Converter接口,将String类型的数值转换为Date类型。

2、配置springmvc.xml中的conversionService bean

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

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

注意:bean的类名称必须是org.springframework.context.support.ConversionServiceFactoryBean。bean必须包含一个converters属性,它将列出在应用程序中用到的所有定制Converter。将我们自定义的DateConverter添加到converters中,通过有参构造函数创建DateConverter。同时annotation-driven元素的conversion-service属性赋bean名称。

3、创建业务方法

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

4、创建addDate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <form action="testDateConverter" method="post">
        请输入日期:<input type="text" name="date"/>(yyyy-MM-dd)<br/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

5、运行

 

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

 

1、创建User实体类

public class User {
    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 "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

2、创建UserConverter转换器

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

public class UserConverter implements Converter<String,User>{

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

}

3、配置springmvc.xml中的conversionService bean

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

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

4、创建业务方法

    @RequestMapping(value="/testUserConverter")
    @ResponseBody
    public String testUserConverter(User user){
        return user.toString();
    }

5、创建addUser.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <form action="testUserConverter" method="post">
        用户信息:<input type="text" name="student"/><font style="font-size:13px">(id-name-age)</font><br/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>

6、运行

源码

链接:
https://pan.baidu.com/s/191wnUwW0a8AOeZnhOSWH5A 
提取码:1v5q

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值