SpringMVC--数据转换、格式化和校验

本文详细介绍了SpringMVC中的数据转换、格式化和校验过程。核心组件DataBinder使用ConversionService进行数据类型转换和格式化,并通过Validator进行数据校验。内容涵盖ConversionService的使用,包括自定义转换器、注解驱动的数据格式化以及JSR-303校验注解的应用。
摘要由CSDN通过智能技术生成

Spring MVC通过反射机制对目标处理方法的签名进行分析,将请求消息绑定到处理方法的入参中。数据绑定的核心部件是DataBinder,运行机制如下:
这里写图片描述
1、SpringMVC主框架将ServletRequest对象及处理方法的入参对象实例传递给DataBinder。
2、DataBinder调用ConversionService组件进行数据类型转换、数据格式化等操作,将ServletRequest中的信息填充到入参对象中。
3、DataBinder调用Validator组件对已经绑定了请求消息数据的入参对象进行数据合法性校验。
4、最终生成数据绑定结果BindingResult对象。该对象既包括已完成数据绑定的入参对象,还包含相应的校验错误对象。

一、ConversionService
ConversionService是Spring类型转换体系的核心接口,可以利用ConversionServiceFactoryBean在Spring的上下文中定义一个ConversionService。Spring将自动识别出上下文中的ConversionService,并在Bean属性配置及SpringMVC处理方法入参绑定等场合使用它进行数据转换。

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"/>

该FactoryBean创建ConversionService内建的很多转换器,包括String、Number、Array、Collection、Map、Properties及Object之间的转换器。

也可以自定义转换器,但是需要实现3种不同的转换器接口,实现任意一个转化器接口都可以作为自定义转化器注册到ConversionServiceFactoryBean中:
1、Converter<\S,T>接口
将S类型的对象转换为T类型的对象
2、ConverterFactory<\S,R>接口
将一种类型的对象转换为另一种类型及其子类的对象。比如,将String类型转换为Number及Number子类(Integer/Long/Double等)对象。
3、GenericConverter接口
根据源对象及目标类对象所在宿主类的上下文信息进行类型转换工作。它有一个实现类ConditionalGenericConverter,有一个方法可以根据宿主类的上下文信息决定是否进行类型转换。

1、自定义一个转化器

//实现Converter<S,T>接口
public class StringToUserConverter implements Converter<String,User> {
   
    public User convert(String source){
        User user=new User();
        if(source!=null){
            String [] items=source.split(":");
            user.setUserName(items[0]);
            user.setPassword(items[1]);
        }
        return user;
    }
}

2、在Spring上下文中装配该自定义的转换器


<!--该标签会默认创建RequestMappingHandlerMapping和RequestMappingHandlerAdapter-->
    <!--也会默认创建ConversionService,也就是FormattingConversionServiceFactoryBean-->
<!--如果有自定义,会覆盖默认的。因为要使用自定义的ConversionService,需要显式定义一个ConversionService覆盖默认的设置-->    
    <mvc:annotation-driven conversion-service="conversionService" />

<!--converters属性可以接受Converter/ConverterFactory/GenericConverter/ConditionGenericConverter接口的实现类-->
<bean 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值