章
目
录
1、类型转换器
1)在参数绑定的案例中,如果我们想只通过一个字符串传递实现对用户两个属性的赋值, 并且使用User对象却接收,该怎么实现?
使用自定义类型转换器
a) SpringMVC 内置了很多参数类型转换器,只有在极少数情况下需要我们自定义参 数类型转换器。
比如:之前的basicData方法中的age既可以用int类型接收,也可以使用String类型 接收
b) 自定义类型转换器步骤:
i.编写自定义类型转换器类
要求实现Converter接口,重写converter方法
注意接口有两个泛型:前一个是被转换的数据类型,后一个是需要转成的数据类型
ii.将UserConverter交给Spring管理,添加到SpringIOC容器中
iii.将userConverter再纳入SpringMVC提供的转换器Bean
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <!-- set注入converters属性(该属性是一个转换器的set集合) --> <property name="converters"> <set> <ref bean="userConverter"/> </set> </property> </bean>
iiii.将conversionService
在注册到mvc:annotation-driven
中去:
jsp:
Controller:
2、数据格式化
1)如果在用户类中添加Date birthday属性,直接接收转换会报错: User类:
2)jsp提交:
3)Controller接收:
4)测试发现400错误 :
使用数据格式化步骤:
准备:先把之前的ConversionServiceFactoryBean
配置注释掉:
a)在springmvc.xml
中配置对数剧格式化的支持(该bean在context包中)
b)在User类中的birthday属性上加@DateTimeFormat注解
5)测试成功
@NumberFormat(pattern="##.#")
注意:FormattingConversionServiceFactoryBean
是ConversionServiceFactoryBean的子类,既可以实现数据格式化,也支持自定义的类型转换器,所以之前注释掉的自定义转换器可以放到FormattingConversionServiceFactoryBean
中来(mvc:annotation-driven conversion- service还是要指定的):
6)如果格式化出错,则可以通过BindingResult
参数来获取错误信息
a)jsp:
b)User:
c)Controller:
d)运行结果:
3、错误消息处理
上面发现浏览器也没有了异常信息,正常跳转到成功页面,为了让页面还能有对应的错误提示,可以将BindingResult的错误信息通过Map存到request域中
jsp用jstl获取输出:
4、数据校验
a)JSR303
b)Hibernate Validator 是JSR303的扩展,扩展如下:
c)演示Hibernate Validator :
ii.配置<mvc:annotation-driven></mvc:annotation-driven>
此时mvc:annotation-driven
注解作用:要实现Hibernate Validator/JSR303(或其他 各种校验)必须要实现SpringMVC提供的一个接口ValidatorFactory
SpringMVC已经帮我们实现了一个校验类:LocalValidatorFactoryBean,而 mvc:annotation-driven
会在SpringMVC容器中自动加载一个LocalValidatorFactoryBean 类,因此可以直接实现数据校验。
iii.直接使用注解
1)在类属性加注解
2)在controller方法需要校验的参数前加注解@Valid
3)测试:
4)结果:
5)也可以测试Hibernate Validator 中扩展的注解,比如: