类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)

IT 文章5年前 (2021)发布 小编
0 0 0

1、类型转换器

1)在参数绑定的案例中,如果我们想只通过一个字符串传递实现对用户两个属性的赋值, 并且使用User对象却接收,该怎么实现?
[v_act]解决办法:[/v_act]
使用自定义类型转换器
a) SpringMVC 内置了很多参数类型转换器,只有在极少数情况下需要我们自定义参 数类型转换器。
比如:之前的basicData方法中的age既可以用int类型接收,也可以使用String类型 接收

b) 自定义类型转换器步骤:
i.编写自定义类型转换器类
要求实现Converter接口,重写converter方法
注意接口有两个泛型:前一个是被转换的数据类型,后一个是需要转成的数据类型
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
ii.将UserConverter交给Spring管理,添加到SpringIOC容器中
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
iii.将userConverter再纳入SpringMVC提供的转换器Bean


          
          
                    
                              
                    
          

类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
iiii.将conversionService在注册到mvc:annotation-driven中去:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
jsp:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
Controller:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)

ad

程序员导航

优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站

2、数据格式化

1)如果在用户类中添加Date birthday属性,直接接收转换会报错: User类:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
2)jsp提交:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
3)Controller接收:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
4)测试发现400错误 :
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
[v_act]解决办法:[/v_act]
使用数据格式化步骤:
准备:先把之前的ConversionServiceFactoryBean配置注释掉:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
a)在springmvc.xml中配置对数剧格式化的支持(该bean在context包中)
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
b)在User类中的birthday属性上加@DateTimeFormat注解
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
5)测试成功

[v_blue]说明:对数据类型也可以格式化,使用注解@NumberFormat(pattern="##.#")[/v_blue]
注意:FormattingConversionServiceFactoryBean是ConversionServiceFactoryBean的子类,既可以实现数据格式化,也支持自定义的类型转换器,所以之前注释掉的自定义转换器可以放到FormattingConversionServiceFactoryBean中来(mvc:annotation-driven conversion- service还是要指定的):
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
6)如果格式化出错,则可以通过BindingResult参数来获取错误信息
a)jsp:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
b)User:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
c)Controller:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
d)运行结果:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)

3、错误消息处理

上面发现浏览器也没有了异常信息,正常跳转到成功页面,为了让页面还能有对应的错误提示,可以将BindingResult的错误信息通过Map存到request域中
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
jsp用jstl获取输出:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
[v_warn]注意:BindingResult result,Map map这两个参数位置不能互换, 因为BindingResult 默认是绑定前一个参数的错误信息。[/v_warn]

4、数据校验

a)JSR303
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
b)Hibernate Validator 是JSR303的扩展,扩展如下:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
c)演示Hibernate Validator :
[v_act]步骤:[/v_act]
i.导入jar
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)

ad

AI 工具导航

优网导航旗下AI工具导航,精选全球千款优质 AI 工具集

ii.配置<mvc:annotation-driven></mvc:annotation-driven>

此时mvc:annotation-driven注解作用:要实现Hibernate Validator/JSR303(或其他 各种校验)必须要实现SpringMVC提供的一个接口ValidatorFactory

SpringMVC已经帮我们实现了一个校验类:LocalValidatorFactoryBean,而 mvc:annotation-driven会在SpringMVC容器中自动加载一个LocalValidatorFactoryBean 类,因此可以直接实现数据校验。

iii.直接使用注解
1)在类属性加注解
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
2)在controller方法需要校验的参数前加注解@Valid
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
3)测试:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
4)结果:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
5)也可以测试Hibernate Validator 中扩展的注解,比如:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)

© 版权声明

相关文章

暂无评论

暂无评论...