行业资讯 2025年08月6日
0 收藏 0 点赞 170 浏览 1865 个字
摘要 :

文章目录 1、类型转换器 2、数据格式化 3、错误消息处理 4、数据校验 1、类型转换器 1)在参数绑定的案例中,如果我们想只通过一个字符串传递实现对用户两个属性的赋值……




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.zuozi.net/7715.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号