SpringMVC 自定义转换器


这里写图片描述


由 String 型字符串转为实体 Employee

例如:
G-gg@qq.com-0-103 convert Employee [id=null, lastName=G, email=gg@qq.com, gender=0, department=Department [id=103, departmentName=null]]

要转换为的实体类型

Employee.java

package com.jxust.springmvc.crud.entities;

public class Employee {

    private Integer id;

    private String lastName;

    private String email;

    private Integer gender;

    private Department department;

    //省略getter and setter toString
}

Department.java

package com.jxust.springmvc.crud.entities;

public class Department {

    private Integer id;
    private String departmentName;

    public Department() {
        super();
    }

    public Department(Integer id, String departmentName) {
        super();
        this.id = id;
        this.departmentName = departmentName;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getDepartmentName() {
        return departmentName;
    }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
    @Override
    public String toString() {
        return "Department [id=" + id + ", departmentName=" + departmentName + "]";
    }
}

自定义转换器

EmployeeConverter.java

package com.jxust.springmvc.converters;

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

import com.jxust.springmvc.crud.entities.Department;
import com.jxust.springmvc.crud.entities.Employee;
/**
 * 自定义类型转换器 String to Employee
 * @author Peng
 * @Date2016年12月2日下午5:46:28
 */
@Component
public class EmployeeConverter implements Converter<String, Employee> {

    @Override
    public Employee convert(String source) {
        if (source != null) {
            // G-gg@qq.com-0-103
            String[] vals = source.split("-");
            if (vals != null && vals.length == 4) {
                String lastName = vals[0];
                String email = vals[1];
                Integer gender = Integer.parseInt(vals[2]);
                Department department = new Department();
                department.setId(Integer.parseInt(vals[3]));
                Employee employee = new Employee(null, lastName, email, gender, department);
                System.out.println(source+" convert "+employee);
                return employee;
            }
        }
        return null;
    }
}

转换器在xml文件中的配置

    .
    .
     <!--  静态资源交给默认的Servlet-->  
      <mvc:default-servlet-handler/>  

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

     <!-- 配置ConversionService --> 
     <bean id="conversionService" 
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <!-- 可以使用 ConversionService
        使用FormattingConversionServiceFactoryBean,自己定义的和系统默认的转换器都可以使用-->
        <property name="converters">
            <set>
                <!-- 自定义的转换器类 -->
                <ref bean="employeeConverter"></ref>
            </set>      
        </property>
     </bean>
     .
     .
<mvc:annotation-driven></mvc:annotation-driven>
会自动注册 RequestMappingHandlerMapping、RequestMappingHandlerAdapter
和ExceptionHandlerExceptionResolver三个bean

还提供了以下的支持
-支持使用ConversionService 示例对表单参数进行类型转换
-支持使用@NumberFormatannotation@DateTimeFormat 注解完成数据类型的格式化
-支持使用 @Valid 注解对 JavaBean 实例进行JSR 303验证
-支持使用@RequestBody@ResponseBody 注解

测试转化器

jsp页面

    测试转换器
    <form action="${pageContext.request.contextPath}/testConversionSrviceConverer" method="post">
        <!-- lastName-email-gender-department.id 例如:GG-gg@qq.com-0-103 -->
        Employee:<input type="text" name="employee"/>
        <input type="submit" value="Submit">
    </form>

controller

从输入参数可以看出,要求是 String 型数据,转为 Employee 型数据,配置了自定义类型转换器,会自动转换

@RequestMapping("/testConversionSrviceConverer")
    public String testConverter(@RequestParam("employee") Employee employee ){
        System.out.println("employee"+employee);
        ..
        return "success";
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值