spring数据绑定流程 转化数据、格式化数据、校验数据

spring数据绑定流程

ConversionService接口

方法:
1、boolean canConvert(Class<?> sourceType,Class<?> targetType) 判断两个java对象是否可以转化
2、boolean canConvert(TypeDescriptor sourceType,TypeDescriptor targetType)需要转换的类将已程远变量的方式出现,TypeDescriptor不仅描述了需要转换类的新奇,还描述了上下文等所有信息
3、《T》 T convert(Object source,Class<?> targetType) 将原类型对象转换为目标类型对象
4、Obect convert(Object source,TypeDescriptor sourceType,TypeDescriptor targetType)经目标从元对象转换为目标对象,通常会用到类中的上下文信息
自定义一个ConversionService
可以配置多个类型转换器
< bean id=“conversionService” class=“org.springframework.context.support.ConversionServiceFactoryBean”>





spring支持的了转换器
  1. Converter< S ,T>将S类型转换为T类型,不考虑上下文信息不能完成复杂的转换,只有一个方法 T converter( S source)
  2. ConverterFacory<S , R >将S类型转化为R类型或者R 的子类 只提供一个方法
  3. GenericConverter接口,根据源类对象和目标了对象的上下文信息,完成转化,有2个接口方法Set<GenericConverter.ConvertiblePair> getConvertiblePairs()
    Object convert(Object source,TypeDescriptor sourceType,TypeDescriptor targetType) ConvertiblePair封装了原类型和对象类型 TypeDescriptor封装了对象的上下文信息
实现编辑器方式

1、开发自定义转换器实现Converter接口,并在XML文件中声明Bean
2、自定义编辑器实现父类PropertyEditorSupport,在controller调用注解@initBinder在指定方法(不是url的目标方法)上,调用自定义编辑器类
3、使用WebBindingInitializer注册全局的编辑器(XML中声明),使用方式类似@initBinder

调用优先级

同一个类型的对象来说,即在ConversionService中装配了自定转换器,有通过WebBindingInitializer接口装配了全局的,又在控制器中同过@initBinder装配了自定义转换器 springMVC会按一下优先级
1、@initBinder 2、ConversionService @WebBindingInitializer

数据格式化
1、Printer 接口

将T类型的对象根据Local信息以某种格式转化,返回字符换类型数据,该接口定义了一个print方法

2、Parser 接口

解析接口 ,根据Local信息 解析字符串到T类型数据 该接口定义了一个 parse方法

3、Formatter 接口

格式化接口继承自 Printer 接口 Parser 接口 它完成T类型的格式化和解析功能

4、FormatterResgistrer ★★★接口 可自定义转换类★★

注册格式化转换器,定义了一个resgistrerFormatters 参数为FormatterResgistrers 用于注册多个格式化转换器

AnnotationFormatterFacor 接口

注解驱动的字段格式化工厂,用于创建带注解的字段的Printer和Parser ,
定义的方法,
1、Set<Class<?>> getFieldTypes **注解A的应用范围,**即哪些属性类可以标注A注解
2、Priner<?>getPrintert(A annotation,Class<?> fieldType)根据注解S获取特定属性类型的Printer
3、Parser<?>getParser(A annotation,Class<?> fieldType)根据注解S获取特定属性类型的Parser
Spring的org.springframework.datetime 对时间的格式化
Spring的org.springframework.number
NumberFormatter 对数字类型对象的格式化
CurrencyFormatter 对货币类型对象的格式化
PercentFormatter 对百分比类型对象的格式化

AnnotationFormatterFacor 接口

org.springframework.annotation

1、@DateTimeFormatter可以对java.util.Date 、java.util.Calendar等时间格式化
1-iso 类型为DateTimeFormatter,ISO 一下长选值
	1--DateTimeFormatter.ISO.DATE :格式化为yyyy-MM-dd
	2--DateTimeFormatter.ISO.DATE_TIME :格式化为yyyy-MM-dd hh:mm:ss.SSSZ
	3--DateTimeFormatter.ISO.TIME :格式化为hh:mm:ss.SSSZ
	4--DateTimeFormatter.ISO.NONE:表示不使用ISO的时间
2-patten 类型为String 使用自定义的时间格式化字符串 如“yyyy-MM-dd”字符串
3-style 类型为String 使用样式指定日期时间的格式  可选值
	S:短日期/时间的样式
	L:中日期/时间的样式
	M:长日期/时间的样式
	F:完整日期/时间的样式
	-:忽略日期/时间的样式
2、@NumberFormatter(style=Style.Number,pattern="#.###")
1、pattern 类型为String 使用自定义的时间格式化字符串 如“yyyy-MM-dd”字符串
2、style  使用样式指定日期时间的格式  可选值
		NumberFormatter.CURRENCY  货币类型
		NumberFormatter.NUMBER  正常数字剋行
		NumberFormatter.PERCENT  百分比类型

数据校验

表 1. Bean Validation 中内置的 constraint
Constraint 详细信息
被注释的元素必须为 null

被注释的元素必须为 true
被注释的元素必须为 false

@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
表 2. Hibernate Validator 附加的 constraint
Constraint 详细信息
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range 被注释的元素必须在合适的范围内
扩展的注解
@NotBlank

TYPEASCII
@Null验证对象是否为null
@NotNull验证对象是否不为null,无法验证字符串长度为0,用于验证基本类型
@AssertTrue`被注释的元素必须为 true
@AssertFalse`被注释的元素必须为 false
@AssertTrue`被注释的元素必须为 true
@Min(value)`验证Number和String对象,其值必须不小于等于指定的最值
@Max(value)验证Number和String对象,其值必须不大于等于指定的最值
@DecimalMin(value)被标注的值必须不小于指定的值,是通过BigDecimal定义的字符串标示,小数存在精度
@DecimalMax(value)被标注的值必须不大于指定的值,是通过BigDecimal定义的字符串标示,小数存在精度
@Digits (integer, fraction)验证字符串是否符合指定格式的数字,inetger指定整数精度,fraction指定小数精度
@Size(max, min)验证(Array、collection、Map、String)长度必须在指定单位内
@Past验证Date 和Calendai对象必须在当前时间之前
@Futhre验证Date和Calendar对象是否在当前时间之后
@pattern验证Strinf对象hi否符合正则表达式规则如@Pattern(regex=“内容”)
@NotBlank`字符串不能为null,被trim()的长度必须大于0,只对字符串且去掉前后空格
@URL`验证是否合法的RUL
@Email被注释的元素必须是电子邮箱地址
@Length(min,max)被注释的字符串的大小必须在指定的范围内
@NotEmpty检查验证(Array、collection、Map、String)是否为null或者empty
@Range(min,max,message)验证属性值必需在合适范围内如@Range(min=18,max=60,message=“学生年龄必须在18-60之间”)
@CreditCardNumver必须是合法的信用卡号码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值