建设部标准网站,wordpress显示分类目录,最吸引人的广告牌,网址你懂我意思正能量不用下载ios目录
1 数据校验介绍
2 普通校验
3 分组校验
4 参考文档 1 数据校验介绍
在实际的项目中#xff0c;一般会有两种校验数据的方式#xff1a;客户端校验和服务端校验
客户端校验#xff1a;这种校验一般是在前端页面使用 JS 代码进行校验#xff0c;主要是验证输入数据…目录
1 数据校验介绍
2 普通校验
3 分组校验
4 参考文档 1 数据校验介绍
在实际的项目中一般会有两种校验数据的方式客户端校验和服务端校验
客户端校验这种校验一般是在前端页面使用 JS 代码进行校验主要是验证输入数据的合法性不合法的数据则没有必要再发送至服务端了。前端校验可以有效的提高用户体验但是无法确保数据完整性因为前端用户可以方便的拿到请求地址然后直接发送请求传递非法参数服务端校验可以有效的保证数据安全与完整性但是用户体验要差一点所以客户端校验和服务端校验通常两者结合使用 SpringMVC 提供了两种方法来对用户的输入数据进行校验一种是 SpringMVC 自带的 Validation 校验框架它提供了简洁的注解和验证规则易于使用并且与 SpringMVC 框架集成良好另一种是利用 JRS-303 验证框架进行验证JRS-303 验证框架的优势在于它的灵活性和可扩展性可以与其他框架或技术进行集成。
注解作用Null标注的属性必须为nullNotNull标注的属性必须不为nullAssertTrue标注的属性必须为trueAssertFalse标注的属性必须为falseMin(value)标注的属性必须是一个数字并且其值必须大于或等于valueMax(value)标注的属性必须是一个数字并且其值必须小于或等于valueDecimalMin(value)必须大于或等于valueDecimalMax(value)必须小于或等于valueSize(max,min)大小必须在max和min限定的范围内Digits(integer,fratction)值必须是一个数字且必须在可接受的范围内Past只能用于日期型且必须是过去的日期Future只能用于日期型且必须是将来的日期Pattern(value)必须符合指定的正则表达式Email必须是格式正确的Email地址Length被注释的字符串大小必须在指定的范围内NotEmpty被注释的字符串不能是空字符串Range被注释的元素必须在指定的范围内
NotEmpty、NotNull 和 NotBlank 三种的区别
NotNull一般用在基本数据类型上包括包装类对象不能为 null但可以为 empty即为空集size 0。NotEmpty可以作用在 String、List、Map 和 Array 等对象不能为 null而且长度必须大于0 (size 0)NotBlank只能作用在 String 上不能为 null而且调用 trim() 后长度必须大于 0 即必须有实际字符
2 普通校验
导入依赖
dependencygroupIdorg.hibernate.validator/groupIdartifactIdhibernate-validator/artifactIdversion6.2.0.Final/version
/dependency
在 SpringMVC 配置文件中配置校验器并注入到处理器适配器中
!-- 配置MVC注解驱动,配置注入校验器 --
mvc:annotation-driven validatorvalidator/!-- 配置校验器 --
bean idvalidator classorg.springframework.validation.beanvalidation.LocalValidatorFactoryBean!-- 校验器--property nameproviderClass valueorg.hibernate.validator.HibernateValidator/!-- 指定校验使用的资源文件如果不指定则默认使用classpath下的ValidationMessages.properties --property namevalidationMessageSource refmessageSource/
/bean
!-- 校验错误信息配置文件 --
bean idmessageSourceclassorg.springframework.context.support.ReloadableResourceBundleMessageSource!-- 资源文件名--property namebasenameslistvalueclasspath:CustomValidationMessages/value/list/property!-- 资源文件编码格式 --property namedefaultEncoding valueutf-8/!-- 对资源文件内容缓存时间单位秒 --property namecacheSeconds value120/
/bean
创建 CustomValidationMessages.properties 配置文件和上述代码中的校验错误信息配置文件名对应也可以将错误提示信息放在一个类中
#添加校验错误提示信息
user.id.isEmpty用户的ID不能为空
user.userName.isEmpty用户名不能为空
user.userName.length用户名为1~6个字符
user.userPwd.isEmpty密码不能为空
user.userPwd.length密码的长度为5~15个字符
user.userEmail.isEmpty邮箱不能为空
user.userEmail.format输入的邮箱格式不正确
需要校验的类 User
public class User {NotNull(message {user.id.isEmpty})private Integer id;NotEmpty(message {user.userName.isEmpty})Length(min 1, max 6, message {user.userName.length})private String userName;NotEmpty(message {user.userPwd.isEmpty})Length(min 5, max 15, message {user.userPwd.length})private String userPwd;NotEmpty(message {user.userEmail.isEmpty})Email(message {user.userEmail.format})private String userEmail;// 省略了 Getter、Setter 方法
校验控制器 Validated 注解和 BindingResult 是成对出现的中间不能穿插其它的形参否则会报 400错误其他形参只能加在它们后面 Controller
public class ValidateController {ResponseBodyRequestMapping(/validate)// 形参前面加上 Validated 注解表示这个实体类需要进行数据校验// BindingResult 封装数据绑定的校验结果public void validate(Validated User user, BindingResult bindingResult) {if (bindingResult.hasErrors()) {//校验未通过获取所有的异常信息并展示出来ListObjectError allErrors bindingResult.getAllErrors();for (ObjectError allError : allErrors) {System.out.println(allError.getObjectName() : allError.getDefaultMessage());}}}
}
index.jsp input nameuserName/ 与 private String userName; 对应 % page contentTypetext/html;charsetUTF-8 languagejava %
htmlheadtitle添加用户/title/headbodyform action${pageContext.request.contextPath}/validate methodpostID号:input typetext nameid placeholder请输入ID号/ br姓名:input typetext nameuserName placeholder请输入姓名/ br密码:input typepassword nameuserPwd placeholder请输入密码/ br邮箱:input typetext nameuserEmail placeholder请输入邮箱/ brinput typesubmit value提交 //form/body
/html
执行结果 3 分组校验 某个属性设置了多种数据校验可以将这些校验分组然后 Controller 方法选择校验分组对数据进行校验
首先定义校验组所谓的校验组它其实就是空接口
// 分组校验接口1
public interface ValidationGroup1 {
}// 分组校验接口2
public interface ValidationGroup2 {
}对校验进行分组
public class User {// groups属性表示校验属于哪个组可以定义多个NotNull(message {user.id.isEmpty}, groups {ValidationGroup2.class})private Integer id;NotEmpty(message {user.userName.isEmpty}, groups {ValidationGroup1.class, ValidationGroup2.class})Length(min 1, max 6, message {user.userName.length}, groups {ValidationGroup1.class, ValidationGroup2.class})private String userName;NotEmpty(message {user.userPwd.isEmpty}, groups {ValidationGroup1.class})Length(min 5, max 15, message {user.userPwd.length}, groups {ValidationGroup1.class})private String userPwd;NotEmpty(message {user.userEmail.isEmpty}, groups {ValidationGroup2.class})Email(message {user.userEmail.format}, groups {ValidationGroup2.class})private String userEmail;// getter setter 构造器 toString 省略...
}
执行结果 4 参考文档
SpringMVC入门学习十五----数据校验 - 唐浩荣 - 博客园 (cnblogs.com)
springMVC如何对输入数据校验实现代码_java_脚本之家 (jb51.net)