springmvc学习笔记(22)——自定义类型转换器

数据绑定流程

  • 使用springmvc框架有诸多好处,其中较为突出的就是它的数据绑定。
  • 当我们的前端传过来一个表单的时候,我们只需要使用一个类对象(如Student对象)就接收,springmvc将帮我们把属性一一对应的填充进去。这就是数据绑定。
  • 数据绑定过程中,springmvc帮我们把前端传来的字符串,转化为属性对应的数据类型(如String->Integer)
  • 那么,springmvc是如何实现数据绑定的呢,我们来简单分析一下。
  • springmvc将request对象以及目标方法的参数传给WebDataBinderFactory 实例,得到一个DataBinder
  • DataBinder调用 ConversionService组件来完成数据类型的转换,数据格式化。
  • 调用Validator组件对数据进行合法性校验,并最终生成数据绑定结果BindingData对象
  • Spring MVC 抽取 BindingResult 中的入参对象和校验错误对象,将它们赋给处理方法的响应入参

下面配上一张示意图(该图来自尚硅谷)
这里写图片描述

自定义类型转换器

控制层

    @RequestMapping("/testConverter")
    public String testConverter(@RequestParam("student")Student student){
        StudentDao.add(student);
        return "redirect:/student";
    }

前端

界面中只有一个input,输入一串字符串

<form action="testConverter" method="post">
    <input type="text" name="student" />
    <input type="submit" value="add"/>
</form>

springmvc如何将String转化为Student对象

写一个自己的类型转换器

package com.zj.converter;

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

import com.zj.model.Address;
import com.zj.model.Student;
@Component
public class StudentConverter implements Converter<String, Student> {

    @Override
    public Student convert(String source) {
        //将String类型转化为Student类型
        //source形式: 123-tom-男-福建省-泉州市
        Student student = null;
        if(source!=null){
            String[] values = source.split("-");
            if(values!=null && values.length==5){
                student = new Student();
                student.setStudentId(Integer.parseInt(values[0]));
                student.setName(values[1]);
                student.setSex(values[2]);
                student.setAddress(new Address(values[3], values[4]));
            }
        }
        return student;
    }

}

这个类实现了spring的Converter,记得给它加上@Component注解,让springmvc帮我们创建bean

在springmvc配置文件中配置

    <!-- 在这里启用转换器 -->
    <mvc:annotation-driven conversion-service="conversionService"/>
    <!-- 定义自定义类型转换器的bean -->
   <bean id="conversionService"
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <!-- 这里是我们自己定义的类型转换器 -->
                <!-- 注意,这里首字母要小写,因为springmvc帮我们创建bean的时候,是以类名首字母小写命名 -->
                <ref bean="studentConverter"/>
            </set>
        </property> 
    </bean>

按以上的方法,就可以轻松的实现自定义类型转换器啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值