spring专题---第三部分MVC---如何给项目定制数据类型转换器

在这里插入图片描述

本篇总结内容如下:

    前言
    如何定制数据类型转换器
    定制一个Date类型的数据类型转换器
    定制一个实体类 类型的数据类型转换器
    总结
    分享与交流

前言

     HTTP请求的参数都是String类型的,spring MVC的Handler虽然可以实现数据类型转换,但是只能实现String—String或String—int类型的转换,有些类型spring MVC是不会进行转换的,比如Date类型,这个时候需要我们自己手写数据类型转换器,实现String—Date类型的转换。

如何定制数据类型转换器

(1)创建Converter类,实现org.springframework.convert.converter.Converter接口,这样该类就成为了一个自定义的数据类型转换器,同时其泛型为<String,xxx>,xxx为我们需要转换的类型。我们以Date数据类型转换器为例。

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
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){
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat(pattern);
        try {
            return simpleDateFormat.parse(source);
        }catch(ParseException e){
            e.printStackTrace();
        }
        return null;
    }
}

(2)在springmvc.xml中配置conversionService bean,这个bean是org.springframework.context.support.ConversionServiceFactoryBean的实例化对象,同时bean中必须包含一个converters属性,它将列出应用程序中用到的所有自定义Converter。将我们自定义的数据类型转换类添加到converters中,通过有参构造函数创建该类实例。

    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="cn.lxy.util.DateConverter">
                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
                </bean>
            </list>
        </property>
    </bean>

     再添加一个annotation-driven标签,将conversation-service属性设置为bean的名称,即conversationService,我们以Date数据类型转换器为例。

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

定制一个Date类型的数据类型转换器

(1)创建数据类型转换类,DateConverter.java

import org.springframework.core.convert.converter.Converter;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateConverter implements Converter<String, Date> {

    private String pattern;

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

    public Date convert(String source){
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat(pattern);
        try {
            return simpleDateFormat.parse(source);
        }catch(ParseException e){
            e.printStackTrace();
        }
        return null;
    }
}

(2)配置springmvc.xml

    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="cn.lxy.util.DateConverter">
                <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
            </bean>
        </list>
    </property>
</bean>

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

(3)创建测试类,业务方法

@Controller
public class Test {

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

(4)启动tomcat,访问
在这里插入图片描述
在这里插入图片描述

定制一个实体类 类型的数据类型转换器

我们定义一个User类型的类型转换器,使String转换为User类型。
(1)创建User实体类

public class User {
    private int id;
    private String name;
    private int age;
}

(2)创建addUser.jsp,通过表单提交数据到后台

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

(3)创建Controller业务方法

@Controller
public class Test {
    
    @RequestMapping("/userConverterTest")
    @ResponseBody
    public String userConverterTest(User user){
        return user.toString();
    }
}

(4)创建userConverter转换器

public class userConverter implements Converter <String,User>{

    public User convert(String source) {
        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;
    }
}

(5)在springmvc.xml中配置UserConverter转换器

    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
      <property name="converters">
        <list>
              <bean class="cn.lxy.util.userConverter"/>
        </list>
      </property>
    </bean>

(6)启动tomcat,访问

总结

     这篇文章我们总结了如何自写一个数据类型转换器,实现C(controller)—V(view)的转换,完美的解决了spring MVC不能转换特殊类型的弊端,spring MVC为我们提供了很好的接口,我们不必在意如何将转换器结合到MVC组件,只需要写出转换逻辑即可,spring MVC可以自动将我们写的转换器融合进MVC组件中。

分享与交流

     以上便是我对这一部分的理解,如果有错误或者你有其他疑惑都可以留言给出,我都会一一进行回复,希望对你有所帮助,如果写的不好也请您多多包涵。欢迎在下方补充留言哟。
     对SSM框架感兴趣的童鞋,可以移步这里,在这里你可以快速的搭建好一个SSM框架。
     如果你在写项目的时候,遇到一些不寻常的问题,也可以关注我的博客园,上边会发布一些我在写项目中遇到的各种问题以及解决方式。

发布了21 篇原创文章 · 获赞 27 · 访问量 4279

猜你喜欢

转载自blog.csdn.net/llllxxxxyyyy/article/details/104127275