栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

告别996之验证框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

告别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";
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691115.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号