SPRINGMVC之类型转换CONVERTER

一、摘要

在spring中定义了3中类型转换接口,分别为:

  1. Converter:使用最简单,最不灵活;
  2. ConverterFactory:使用较为复杂,比较灵活;
  3. GenericConverter:使用最复杂,也最灵活;

本文仅介绍Convert接口的使用。

二、示例

Converter是用来将一个object转换为另一个object的接口。

1、先定义转换类,实现Converter<S,T>接口

public class Person{
    private String userName;
    private String password;
}

/**
 * Spring MVC数据转换-简单示例
 * 将形如:“zhangSan:888”的字符串转换为Person对象
 *
 */
public class StringToPersonConverter implements Converter<String,Person>{
    public Person convert(String source) {
        Person p1 = new Person();
        if(source != null){
            String[] items = source.split(":");
            p1.setUsername(items[0]);
            p1.setPasswd(items[1]);
        }
        return p1;
    }
}

2、装配自定义的conversionService

    <!-- 扫描web包,应用Spring的注解 -->
    <context:component-scan base-package="com.package.web"/>

    <mvc:annotation-driven conversion-service="conversionService"/>
    <bean id="conversionService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.package.model.StringToPersonConverter" />
            </list>
        </property>
    </bean>

    <!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面,默认优先级最低 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:viewClass="org.springframework.web.servlet.view.JstlView" 
        p:prefix="/jsp/"
        p:suffix=".jsp" />

Controller:

@RequestMapping(value="/conversionTest")
public String conversionTest(@RequestParam("person")Person p,ModelMap modelMap){
    modelMap.put("person",p);
    return "test";
}

test.jsp:

<body>
    <div >
    用户名:{person.userName},密码:{person.password}
    </div>
</body>

当前台发送请求:

http://localhost:8080/SpringMVCTest/test/conversionTest.action?person=zhangsan:666 时;

将person=zhangsan:666传递到后台,被StringToPersonConverter转换为Person对象;

跳转到界面:test.jsp,然后输出用户名:zhangsan,密码:666