Spring Boot Validator框架
2017-04-26 00:09
162 查看
1,简介
Springbootvalidator实际集成了Hibernatevalidator。主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。方便后台的数据合法性的校验。
2,Demo
以新增用户为例,在页面上有两个元素:姓名输入框,密码输入库以及提交按钮。提交到后台之后,使用Validator进行校验,然后如果存在错误,转发到demo.html,我们先编写一个实体类接收用户的输入,以及使用Validator注解校验:
这个实体类在属性上加入了注解@NotEmpty,@Length。
@NotEmpty表示不能为空,message是它的错误提示信息。
@Length用来验证长度,min表示最小长度不能小于6。
3,详细介绍每个注解
4,进阶(@ScriptAssert)
如果需要校验的业务逻辑比较复杂,简单的@NotBlank,@Min注解已经无法满足需求了,这时可以使用@ScriptAssert来指定进行校验的方法,通过方法来进行复杂业务逻辑的校验,然后返回true或false来表明是否校验成功。例如下面的例子:
//通过script属性指定进行校验的方法,传递校验的参数,
@ScriptAssert(lang="javascript",script="com.learn.validate.domain.Student.checkParams(_this.name,_this.age,_this.classes)"messgae="")
publicclassStudent{
privateStringname;
privateintage;
privateStringclassess;
//注意进行校验的方法要写成静态方法,否则会出现
//TypeError:xxxisnotafunction的错误
publicstaticbooleancheckParams(Stringname,intage,Stringclasses){
if(name!=null&&age>8&classes!=null){
returntrue;
}else{
returnfalse;
}
}
}
1、定义验证注解
Springbootvalidator实际集成了Hibernatevalidator。主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。方便后台的数据合法性的校验。
2,Demo
以新增用户为例,在页面上有两个元素:姓名输入框,密码输入库以及提交按钮。提交到后台之后,使用Validator进行校验,然后如果存在错误,转发到demo.html,我们先编写一个实体类接收用户的输入,以及使用Validator注解校验:
public class Demo{ private long id; @NotEmpty(message="姓名不能为空") private String name; @NotEmpty(message="密码不能为空") @Length(min=6,message="密码长度不能小于6位") private String password; }
这个实体类在属性上加入了注解@NotEmpty,@Length。
@NotEmpty表示不能为空,message是它的错误提示信息。
@Length用来验证长度,min表示最小长度不能小于6。
3,详细介绍每个注解
名称 | 使用描述 | 例子 |
@null | 验证对象是否为空 | |
@notnull | 验证对象是否为非空 | @NotNull(message="身份证不能为空") |
@asserttrue | 验证boolean对象是否为true | @AssertTrue(message="") |
@assertfalse | 验证boolean对象是否为false | @AssertFalse(message="") |
@min | 验证number和string对象是否大等于指定的值 | @Min(value=18,message="必须年满18岁!") |
@max | 验证number和string对象是否小等于指定的值 | @Max(value=100,message="年龄不能大于100岁") |
@length | 验证string的长度 | @Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间") |
@decimalmin | 验证number和string对象是否大等于指定的值,小数存在精度 | @DecimalMax(value="100",message="decim最大值是100") |
@decimalmax | 验证number和string对象是否小等于指定的值,小数存在精度 | DecimalMin(value="100",message="decim最小值是100") |
@size | 验证对象(array,collection,map,string)长度是否在给定的范围之内 | @size(min=6,max=20,message="密码长度只能在6-20之间") |
@digits | 验证number和string的构成是否合法 | @Digits(integer=2,fraction=20) |
@past | 验证date和calendar对象是否在当前时间之前 | @Past(message=””) |
@future | 验证date和calendar对象是否在当前时间之后 | @Future(message=””) |
@pattern | 验证String对象是否符合正则表达式的规则 | @Pattern(regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}",message="邮件格式错误") |
@Email | 验证邮箱 | @Email(message = "输入正确的邮箱") |
如果需要校验的业务逻辑比较复杂,简单的@NotBlank,@Min注解已经无法满足需求了,这时可以使用@ScriptAssert来指定进行校验的方法,通过方法来进行复杂业务逻辑的校验,然后返回true或false来表明是否校验成功。例如下面的例子:
//通过script属性指定进行校验的方法,传递校验的参数,
@ScriptAssert(lang="javascript",script="com.learn.validate.domain.Student.checkParams(_this.name,_this.age,_this.classes)"messgae="")
publicclassStudent{
privateStringname;
privateintage;
privateStringclassess;
//注意进行校验的方法要写成静态方法,否则会出现
//TypeError:xxxisnotafunction的错误
publicstaticbooleancheckParams(Stringname,intage,Stringclasses){
if(name!=null&&age>8&classes!=null){
returntrue;
}else{
returnfalse;
}
}
}
5,自定义验证规则
有时候默认的规则可能还不够,有时候还需要自定义规则,比如屏蔽关键词验证是非常常见的一个功能,比如在发帖时帖子中不允许出现admin等关键词。1、定义验证注解
@Target({FIELD,METHOD,PARAMETER,ANNOTATION_TYPE})
@Retention(RUNTIME)
//指定验证器
@Constraint(validatedBy=ForbiddenValidator.class)
@Documented
public@interfaceForbidden{
//默认错误消息
Stringmessage()default"{forbidden.word}";
//分组
Class<?>[]groups()default{};
//负载
Class<?extendsPayload>[]payload()default{};
//指定多个时使用
@Target({FIELD,METHOD,PARAMETER,ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
@interfaceList{
Forbidden[]value();
}
}
2
、定义验证器
publicclassForbiddenValidatorimplementsConstraintValidator<Forbidden,String>{
privateString[]forbiddenWords={"admin"};
@Override
publicvoidinitialize(ForbiddenconstraintAnnotation){
//初始化,得到注解数据
}
@Override
publicbooleanisValid(Stringvalue,ConstraintValidatorContextcontext){
if(StringUtils.isEmpty(value)){
returntrue;
}
for(Stringword:forbiddenWords){
if(value.contains(word)){
returnfalse;//验证失败
}
}
returntrue;
}
}
3
、使用
publicclassUserimplementsSerializable{
@Forbidden()
privateStringname;
}
4
、当我们在提交
name
中含有
admin
的时候会输出错误消息。
相关文章推荐
- 使用 Spring Boot 快速构建 Spring 框架应用
- 使用 Spring Boot 快速构建 Spring 框架应用
- 使用 Spring Boot 快速构建 Spring 框架应用
- spring集成JSR-303验证框架--Hibernate-validator实现
- (4)Spring Boot使用别的json解析框架【从零开始学Spring Boot】
- 【spring-boot】快速构建spring-boot微框架
- Spring Boot集成Jasypt安全框架
- spring boot 集成框架事例
- Spring Boot 集成 批处理框架Spring batch
- Spring Boot 微框架学习(利用Spring Boot编写一个访问数据库的helloword)
- 记录一次Spring boot 搭建框架连接Mysql数据库注解事务不回滚的故障
- springboot框架下的上传下载
- 深入学习微框架:Spring Boot(转)
- Spring Boot、Mybatis框架整合开发Java RESTful Web Service
- 基于spring-boot的rest微服务框架
- [原创]Spring boot 框架构建jsp web应用
- 使用 Spring Boot 快速构建 Spring 框架应用
- spring boot 框架下的redis缓存问题
- Spring Boot 学习笔记 - 认识Spring Boot框架
- 使用 Spring Boot 快速构建 Spring 框架应用