使用SpringMVC怎么实现一个类型转换功能

  介绍

这篇文章主要介绍了使用SpringMVC怎么实现一个类型转换功能,此处给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:

<强> Spring mvc数据绑定流程:

SpringMVC将ServletRequest对象及目标方法的形参实例传给WebDataBinderFactory实例,以创建DataBinder实例对象.DataBinder调用装配在SpringMVC上下文中的ConversionService组件进行类型转换和数据格式化工作,将Servlet请求信息填充到形参对象中。调用验证器主键对已经绑定了请求信息的形参对象精选数据有效性验证,并最终生成数据绑定结果BindingData对象.SpringMVC抽取BindingResult中的形参对象和校验错误对象,将他们赋给处理方法的相应参数

我们查看源代码可以看的到,通过WebDataBinderFactory创建DataBinder对象

使用SpringMVC怎么实现一个类型转换功能

<>强自定义类型转换器

当我们碰到一些特殊场合,有可能需要我们自己定义类型转换器。下麦呢来讲解一个自定义类型转器,将字符串转换成电磁脉冲对象,当页面无法完成数据绑定或者类型转换时,SpringMVC会抛出异常,异常信息可以使用BindingResult来进行获取。

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

Convertre<年代,T>:将S类型转换为T类型。

ConverterFactory:将相同系类的多个“同质”转换器封装在一起,如果希望一种类型转换成另一种类型以及子类对象(例如字符串转换成数量以数量的子类),可以使用该转换器

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

package  com.spring.mvc.controller;   import  org.springframework.core.convert.converter.Converter;   import  org.springframework.stereotype.Component;   @ component   public  class  UserConverter  implements  Converter<字符串,,User> {   ,@Override   ,public  User 转换(String 源),{   System.out.println才能(源);   String 才能;users  [],=, source.split(“产生绯闻);   User 才能;User =, new 用户();   user.setUno才能(Integer.valueOf(用户[0]));   user.setUsername才能(用户[1]);   user.setUserpass才能(用户[2]);   return 才能;用户;   ,}   }

ConversionService时SpringMVC中类型转换器的核心接口,要添加自定义类型转换器,需要实现该接口/利用

ConversionServiceFactoryBean在Spring的IOC容器中第一一个ConversionService,并在豆属性配置对于的类型转换器的实现类,SpringMVC处理方法的形参绑定时就会自动调用该类型转换器。

& lt; !——将非映射配置下的请求交给默认的Servlet来处理,——比;   ,& lt; mvc: default-servlet-handler /比;   ,& lt; bean  id=癱onversionService"   类才能=皁rg.springframework.context.support.ConversionServiceFactoryBean"祝辞   & lt;才能property  name=癱onverters"比;   ,,& lt; set>   ,,,& lt; ref  bean=皍serConverter",/比;   ,,& lt;/set>   & lt;才能/property>   ,& lt;/bean>   ,& lt; !——,注册类型转换器,——比;   ,& lt; mvc: annotation-driven 转换服务=癱onversionService",/在

在实际的开发同需要配置:& lt; mvc:注解驱动/祝辞标签

<强>数据格式化

对属性的输入/输出格式化,其本质来讲依然属于类型转换的范畴.Spring在格式化模块中定义一个实现ConversionService接口的FarmattingConversionService实现类,该实现类扩展了GenericConversionService,因此它既具有类型转换的功能有具有格式化的功能.FormattingConversionService拥有一个FormattingConversionServiceFactoryBean工厂类,后者用于构造前者。我们要注册这个

& lt; mvc: annotation-driven 转换服务=癋ormattingConversionServiceFactoryBean",/在

JSR303

JSR303时java bean为数据合法性校验提供的标准框架,它已经包含在JavaEE6.0中,JSR303通过在豆属性上标注类似@NotNull, @Max等标准的数据指定验证规则,并通过标注的验证接口对bean进行验证。

@NotEmpty   ,@NotNull   ,private  String 名称;   ,,   ,@NotNull   ,@NotEmpty   ,private  String 年龄;   ,,   ,@NotNull   ,@NotEmpty   ,   ,private  String 电子邮件;

使用SpringMVC怎么实现一个类型转换功能