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

Java技术 潘老师 3年前 (2021-03-08) 1363 ℃ (0) 扫码查看

1、类型转换器

1)在参数绑定的案例中,如果我们想只通过一个字符串传递实现对用户两个属性的赋值, 并且使用User对象却接收,该怎么实现?

解决办法:

使用自定义类型转换器
a) SpringMVC 内置了很多参数类型转换器,只有在极少数情况下需要我们自定义参 数类型转换器。
比如:之前的basicData方法中的age既可以用int类型接收,也可以使用String类型 接收

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

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

2、数据格式化

1)如果在用户类中添加Date birthday属性,直接接收转换会报错: User类:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
2)jsp提交:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
3)Controller接收:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
4)测试发现400错误 :
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)

解决办法:

使用数据格式化步骤:
准备:先把之前的ConversionServiceFactoryBean配置注释掉:
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
a)在springmvc.xml中配置对数剧格式化的支持(该bean在context包中)
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
b)在User类中的birthday属性上加@DateTimeFormat注解
类型转换、数据格式化、错误消息处理、数据校验——SpringMVC框架系列教程(9)
5)测试成功

说明:对数据类型也可以格式化,使用注解@NumberFormat(pattern="##.#")

注意: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)

注意:BindingResult result,Map map这两个参数位置不能互换, 因为BindingResult 默认是绑定前一个参数的错误信息。

4、数据校验

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

步骤:

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

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)


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/2407.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】