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

数据绑定流程

使用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>


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

猜你喜欢

转载自blog.csdn.net/qq_36826506/article/details/85010566
今日推荐