SpringMVC类型转换,验证
Spring mvc 数据绑定流程:
SpringMvc将ServletRequest对象及目标方法的形参实例传给WebDataBinderFactory实例,以创建DataBinder实例对象。DataBinder调用装配在SpringMvc上下文中的ConversionService组件进行类型转换和数据格式化工作,将Servlet请求信息填充到形参对象中。调用Validator主键对已经绑定了请求信息的形参对象精选数据有效性验证,并最终生成数据绑定结果BindingData对象。SpringMVC抽取BindingResult中的形参对象和校验错误对象,将他们赋给处理方法的相应参数
我们查看源代码可以看到,通过WebDataBinderFactory创建DataBinder对象
自定义类型转换器
当我们碰到一些特殊场合,有可能需要我们自己定义类型转换器。下麦呢来讲解一个自定义类型转器,将字符串转换成emp对象,当页面无法完成数据绑定或者类型转换时,springmvc会抛出异常,异常信息可以使用BindingResult来进行获取。
Spring定义了三种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactoryBean中。
Convertre<S,T>:将S类型转换为T类型。
ConverterFactory:将相同系类的多个“同质”Converter封装在一起,如果希望一种类型转换成另一种类型以及子类对象(例如String转换成Number以Number的子类),可以使用该转换器
GenericConverter:会根据源类对象以及目标类对象所在的宿主类中的上下文信息精选类型转换。
package com.spring.mvc.controller; import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component; @Component
public class UserConverter implements Converter<String, User>{
@Override
public User convert(String source) {
System.out.println(source);
String users [] = source.split("-");
User user = new User();
user.setUno(Integer.valueOf(users[0]));
user.setUsername(users[1]);
user.setUserpass(users[2]);
return user;
}
}
ConversionService时SpringMVC中类型转换器的核心接口,要添加自定义类型转换器,需要实现该接口/利用ConversionServiceFactoryBean在Spring的IOC容器中第一一个ConversionService,并在Bean属性配置对于的类型转换器的实现类,SpringMvc处理方法的形参绑定时就会自动调用该类型转换器。
<!--将非mapping配置下的请求交给默认的Servlet来处理 -->
<mvc:default-servlet-handler />
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="userConverter" />
</set>
</property>
</bean>
<!-- 注册类型转换器 -->
<mvc:annotation-driven conversion-service="conversionService" />
在实际的开发同需要配置:<mvc:annotation-driven />标签
数据格式化
对属性的输入/输出格式化,其本质来讲依然属于类型转换的范畴。Spring在格式化模块中定义一个实现ConversionService接口的FarmattingConversionService实现类,该实现类扩展了GenericConversionService,因此它既具有类型转换的功能有具有格式化的功能。FormattingConversionService拥有一个FormattingConversionServiceFactoryBean工厂类,后者用于构造前者。我们要注册这个
<mvc:annotation-driven conversion-service="FormattingConversionServiceFactoryBean" />
JSR303
jsr303时java为bean数据合法性校验提供的标准框架,它已经包含在JavaEE6.0中,JSR303通过在Bean属性上标注类似@NotNull,@Max等标准的数据指定验证规则,并通过标注的验证接口对Bean进行验证。
@NotEmpty
@NotNull
private String name; @NotNull
@NotEmpty
private String age; @NotNull
@NotEmpty
private String email;
我们在前台使用SpringMVC提供的Form标签使用Form:errors path 绑定属性即可
@RequestMapping(value="/student",method=RequestMethod.POST)
public String add(@Valid()Student student,BindingResult result){
if (!result.hasErrors()) {//判断是否有格式转换错误或者其他校验没通过
userService.addStudent(student);
return "redirect:list";
}else
return "addPage";
}
SpringMvc提示消息国际化
<!-- 注册国际化信息,必须有id,指定资源文件名称,资源文件在src目录下 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="message"></property>
</bean>
SpringMVC类型转换,验证的更多相关文章
- SpringMVC数据验证
SpringMVC数据验证——第七章 注解式控制器的数据验证.类型转换及格式化——跟着开涛学SpringMVC 资源来自:http://jinnianshilongnian.iteye.com/blo ...
- SpringMVC类型转换、数据绑定
SpringMVC类型转换.数据绑定详解[附带源码分析] 目录 前言 属性编辑器介绍 重要接口和类介绍 部分类和接口测试 源码分析 编写自定义的属性编辑器 总结 参考资料 前言 SpringMVC是目 ...
- SpringMVC 使用验证框架 Bean Validation(上)
SpringMVC 使用验证框架 Bean Validation(上) 对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证. ...
- springMVC 类型转换
springMVC 类型转换 https://www.cnblogs.com/hafiz/p/5812873.html
- SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息
在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.sprin ...
- SpringMVC类型转换、数据绑定详解[附带源码分析]
目录 前言 属性编辑器介绍 重要接口和类介绍 部分类和接口测试 源码分析 编写自定义的属性编辑器 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那 ...
- SpringMVC类型转换、数据绑定详解
public String method(Integer num, Date birth) { ... } Http请求传递的数据都是字符串String类型的,上面这个方法在Controller中定义 ...
- springMVC数据验证出现404错误解决办法
今天使用springMVC的数据验证的时候,看似很简单的东西,却有一个很大的陷阱:提交空表单的时候总是出现404错误,但是后台却不给你报任何错.遇到这个错误这个很苦恼,搞了几小时,今天记录并分享一下解 ...
- [译]SpringMVC自定义验证注解(SpringMVC custom validation annotations)
在基于SpringMVC框架的开发中,我们经常要对用户提交的字段进行合法性验证,比如整数类型的字段有个范围约束,我们会用@Range(min=1, max=4).在实际应用开发中,我们经常碰到一些自己 ...
随机推荐
- 向dnsrecord.txt 中添加 配置
#!/bin/bash Ip_addr=`cat /etc/dnsrecord.txt |awk '{print $1}' |head -1` Check_dns_url(){ grep $1 /et ...
- 深入理解jQuery中的each方法
写在前面 我们先回顾一下数组中的forEach方法吧.在数组的实例上有个forEach方法供所有实例使用,forEach里面接收一个回调函数,而且回调函数默认接收三个参数:当前项,索引,数组 .for ...
- 登录mysql时的一些命令
清屏: cls 只要输入cls然后回车运行命令,可以清屏. 查看版本号: mysql -V 注意:V一定要大写,如果不大写就错了... 登录: mysql -u用户名 -p密码 -P端口号 -h数据库 ...
- 通过Cookie统计上次网页访问时间
servlet类: import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date; import ...
- CSL 的字符串(单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/551/D 题目大意: 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. 给定 ...
- mysql 8.0 ~ 存储和账户
一 简介:关于存储数据文件的改进二 数据文件: 1合并了存储数据库对象信息的事务性数据字典 1 相关文件等存储引擎层存储元数据文件已消失,只有ibd文件,元数据存储在数据字典表 ...
- 关于vue监听dom与传值问题
1. 代码初始化一次执行部分属性为空的情况 原因: 异步加载 + 立马 传值时 直接渲染 dom里面 能实时更新 (无影响) 不能直接dom中渲染(有影响) 解决方法:需要通过监听的方式来处 ...
- python小练习,密码等级问题
. # 密码安全性检查代码 . # . # 低级密码要求: . # . 密码由单纯的数字或字母组成 . # . 密码长度小于等于8位 . # . # 中级密码要求: . # . 密码必须由数字.字母或 ...
- HAProxy详解(一):HAProxy介绍【转】
一.高性能负载均衡软件HAProxy介绍: 随着互联网业务的迅猛发展,大型电商平台和门户网站对系统的可用性和可靠性要求越来越高,高可用集群.负载均衡集群成为一种热门的系统架构解决方案.在众多的负载均衡 ...
- MongoDB与MySQL的插入、查询性能测试
1.1 MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地的.作为一个开源的关系型数据库,MySQL被大量应用在各大网站后台中,承担着信息存储的重要作用.2009年,甲骨文 ...