Spring -- 自定义转换器

本文介绍了Spring MVC中自定义转换器的实现方法,包括Converter、ConverterFactory和GenericConverter三种转换器接口,并通过一个具体的示例展示了如何将字符串转换为Employee对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring 定义了 3 种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到 ConversionServiceFactoryBean 中:

Converter<S,T>:将 S 类型对象转为 T 类型对象;

 ConverterFactory:将相同系列多个 “同质” Converter 封装在一起。如果希望将一种类型的对象转换为另一种类型及其子类的对象(例如将 String 转换为 Number 及 Number 子类(Integer、Long、Double 等)对象)可使用该转换器工厂类;

GenericConverter:会根据源类对象及目标类对象所在的宿主类中的上下文信息进行类型转换。

举个例子来实现下自定义转换器:

例如Employee对象,现在在页面提交的时候内容是“zhangsan,aaa@qq.com,1,101”,需要转化为Employee对象进行保存。

首先先看Employee对象:

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private Integer gender;
    private Date birth;
    private Department department;
    }        

“zhangsan”赋给lastName;

“aaa@qq.com”赋给email;

“1”给gender;

“101”给Department ;

再看下Department的结构:

public class Department {

    private Integer id;
    private String departmentName;
    }

上面的JavaBean省略了构造和get set细节,具体代码里面应该写上,博客里面就不累赘。

然后自定义转换器:

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

import com.soyoungboy.bean.Department;
import com.soyoungboy.bean.Employee;
/**
 * string转Employee
 * @author MSI1
 *
 */
public class StringToEmployeeConverter implements Converter<String, Employee> {

    @Override
    public Employee convert(String str) {
        String strTrim = str.trim();
        if (strTrim != null && !strTrim.equals("")) {
            String[] strs = strTrim.split(",");
            // zhangsan,aaa@qq.com,1,101,将字符串转化为字符串数组,然后通过构造函数拼装进指定属性
            Employee employee = new Employee(null, strs[0], strs[1], Integer.parseInt(strs[2]),
                    new Department(Integer.parseInt(strs[3]), ""));
            return employee;
        }
        return new Employee();
    }

}

配置文件里面配置:

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

将自定义的转换器注册到Spring上下文中去。

jsp界面:

 <form action="${ctp }/quickadd" method="post">

        <!-- 员工的所有信息全部写上;用-分隔

        zhangsan-aaa@qq.com-1-101

          -->

        员工信息:<input name="empInfo" value="zhangsan,aaa@qq.com,1,101" style="width: 300px;"/>

        <input type="submit" value="快速添加"/>

    </form>

测试代码:

@RequestMapping("/quickadd")
    public String quickAdd(@RequestParam("empInfo")Employee emp){
        System.out.println(emp);
        employeeDao.save(emp);
        return "redirect:/emps";
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值