springValidator
1,简介
Springboot validator实际集成了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(message = "输入正确的邮箱") |
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="")
- public class Student {
- private String name;
- private int age;
- private String classess;
- //注意进行校验的方法要写成静态方法,否则会出现
- //TypeError: xxx is not a function 的错误
- public static boolean checkParams(String name,int age,String classes) {
- if(name!=null&&age>8&classes!=null){
- return true;
- }else{
- return false;
- }
- }
- }
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
、定义验证器
- publicclassForbiddenValidator implementsConstraintValidator<Forbidden, String> {
- privateString[]forbiddenWords = {"admin"};
- @Override
- publicvoidinitialize(ForbiddenconstraintAnnotation) {
- //初始化,得到注解数据
- }
- @Override
- publicbooleanisValid(Stringvalue, ConstraintValidatorContext context) {
- if(StringUtils.isEmpty(value)){
- returntrue;
- }
- for(Stringword : forbiddenWords) {
- if(value.contains(word)){
- returnfalse;//验证失败
- }
- }
- returntrue;
- }
- }
3
、使用
4
、当我们在提交
name
中含有
admin
的时候会输出错误消息。
posted on 2018-04-18 18:56 yangjingzhi 阅读(152) 评论(0) 编辑 收藏 举报