springMvc-07 类型转换、格式化、数据校验==
前端给后端传递数据进行数据绑定时,会经过类型转换,数据格式化,以及数据校验的过程。
1、类型转换
SpringMVC框架提供了一个通用的类型转换模块,该类型转换模块位于包org.springframework.core.convert中,可以在处理方法的参数绑定中使用他们进行数据转换。
SpringMVC框架中内置了很多的类型转换。
为什么页面上输入”12”,可以赋值给Handler方法对应的参数?
这是因为框架内部帮我们做了类型转换的工作。将String转换成int
但默认类型转换器并不是可以将用户提交的String,转换为用户需要的所有类型。此时 ,就需要自定义类型转换器了
例如:我们文本框里边要输入2021,01,01之后要让其转换为日期类型,则需要自定义类型转换器。
自定义类型转换器的方式有3三种:
1)Converter:是SpringMVC最简单的一个转换器接口,可以实现任意类型间的相互转换,负责把S转为T
2)ConverterFactory:将一种类型的对象转换成另一个类型及其子类型对象。其中S为转换的源类型,R为目标类型的基类,T为R的子类。
3)GenericConverter,转换方法参数中包含TypeDescriptor类型的参数,这个参数包含了上下文信息,能够根据上下文信息进行类型转换。
举例:===
1)转换器实现
2)SpringMVC配置
3)测试
2、数据格式化
从Spring3.0开始,引入了格式化转换框架,该框架位于Spring-context.jar包中。
Spring在格式化模块中定义了一个实现ConversionService接口的FormattingConversionService实现类,该类既具有类型转换功能,有具有格式化功能。
Formatter和Converter一样, 是将一种类型转换成另一种类型, 但是, Formatter的源类型必须是一个String, 目标类型是java类型.
通过FormattingConversionServiceFactoryBean即可以实现注册定义的转换器,也可以注册自定义的格式化器。
具体配置如下:
Spring内置了很多的格式化转换器,也允许我们自定义,例如定义了一个坐标类Point,内部包含x,y属性,如果表单上输入2,3之后,能够将其转换为Point对象,则需要自己编写数据格式化器。