告别996之验证框架

目录

1.概念介绍

1.1验证框架对比

 1.2 Bean Validation简介

1.3 JCP,JSR简介

1.4 JSR303 JSR349 JSR380

1.5 Bean Validation与Hibernate Validate

1.6 Hibernate Validator与Spring Validation

2.约束注解

2.1,初级约束注解的使用(spring-boot-starter-web中已有相关依赖)

2.2.分组验证

2.3.组序列


1.概念介绍

1.1验证框架对比

  • 分层验证框架(每一层对业务数据进行校验:导致许多重复性的代码分散在不同的层中)

  • Java Bean验证模型(将验证逻辑通过注解约束在域模型上)

 1.2 Bean Validation简介

  • Bean Validation为javaBean验证定义了相应的元数据模型和API

1.3 JCP,JSR简介

  • JCP(Java Community Process)成立于1998年,是使有兴趣的各方参与定义Java的特征和未来版本的正式过程
  • JCP使用JSR(Java规范请求,Java Specificaton Reuqests)作为正式规范文档,描述被提议加入到Java体系中的规范和技术

1.4 JSR303 JSR349 JSR380

  • JSR303: Bean Vaildation1.0
  • JSR349: Bean Vaildation1.1
  • JSR380 Bean Vaildation2.0

1.5 Bean Validation与Hibernate Validate

  • Bean Vaildation1.0参考实现:Hibernate Validator 4.3.1.Final
    • Bean Vaildation1.1参考实现:Hibernate Validator 5.1.1.Final
    • Bean Vaildation2.0参考实现:Hibernate Validator 6.0.1.Final

1.6 Hibernate Validator与Spring Validation

  • Spring Validation在Hibernate Validator的基础上,对其进行了二次封装,以满足再Spring环境中更简单,高效的对数据进行验证

2.约束注解

  • 空值校验类:@Null;@NotNull,@NotEmpty,@NotBlank
    • @NotEmpty不会去掉前后空格;@NotBlank会去掉前后空格再进行校验
  • 范围校验类:@Min,@Size(min或者max):对集合的个数进行限定,@Digits(被注释的元素必须是一个数字,其值必须在可接受的范围内),@Future(被注释的元素必须是一个将来的日期),@Negative
  • 其他校验类:@Email,@URL,@AssertTrue(被注释的元素必须为true),@Pattern(被注释的元素必须符合指定的正则表达式)等

2.1,初级约束注解的使用(spring-boot-starter-web中已有相关依赖)

加入Validation的相关依赖:javax.validation;validation-api;2.0.1.Final

加入hibernate-validator依赖:org.hiberna; hibernate-validator;6.0.16.Final

//登陆场景(分组时用到)
public interface LoginGroup{}
//注册场景(分组时用到)
public interface RegisterGroup{}

@GroupSequence({

            LoginGroup.class,

            RegisterGroup.class,

            //没有明确规定属于哪个组的

            Default.class

    })

//只有注解声明为LoginGroup才会验证这个
@NotNull(message = "用户id在登陆时不能为空",groups = LoginGroup.class)
private Integer id;
@NotBlank(message = "用户姓名不能为空")
private String name;
@NotNull(message = "邮箱在注册时不能为空",groups = RegisterGroup.class)
@Email(message = "邮箱格式必须正确")
private String email;
@Min(value = 18,message = "年龄不能小于18岁")
private int age;
@NotNull(message = "用户的朋友不能为空",groups = {RegisterGroup.class,LoginGroup.class})
@Size(min = 1,message = "用户的朋友至少1个")

//级联验证:既可以验证本身属性,又可以验证引用的实例
private List<@Valid SysUser> friend;

2.2.分组验证

  • 在注册场景下email不能为空

@NotNull(message = "邮箱在注册时不能为空",groups = RegisterGroup.class)

  • 在登陆场景下,uerid不能为空

@NotNull(message = "用户id在登陆时不能为空",groups = LoginGroup.class)

2.3.组序列

  • 对对象中的带有groups的属性进行验证,按照@GroupSequence中的顺序进行验证

@GroupSequence({

            LoginGroup.class,

            RegisterGroup.class,

            //没有明确规定属于哪个组的

            Default.class

    })

  • Controller方法
    • 一个校验类对应一个校验结果(BindingResult),校验结果会被自动填充
@RequestMapping("/addUser")
public String valid(@Validated Person person, BindingResult result) {
    if (bindingResult.hasErrors()) {
        for (FieldError fieldError : bindingResult.getFieldErrors()) {
            System.out.println(fieldError);
        }
        return "fail";
    }
    return "success";
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值