前言

在日常的接口开发中,经常要对接口的参数做校验,例如,登录的时候要校验用户名密码是否为空。但是这种日常的接口参数校验太烦锁了,代码繁琐又多。

Validator框架就是为了解决开发人员在开发的时候少写代码,提升开发效率的;它专门用来做接口参数的校验的,例如
email校验、用户名长度必须位于6到12之间等等。

注意,SpringBoot最新版本已经移除了自带的Validator依赖,因此发现没有该依赖后请导入以下依赖。

<!-- validation依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.3.4.RELEASE</version>
</dependency>

Validator参数校验器

创建一个vo类,用来做参数的注解

@Data
@ApiModel("小车状态")
public class CarStatus {@NotEmpty(message = "小车id不能为空")@Length(max = 11,message = "id长度不能超过11位")@ApiModelProperty("小车id")private int CarId;@NotEmpty(message = "小车状态不能为空")@Pattern(regexp = "",message = "小车状态有误")@ApiModelProperty("小车状态")private String CarAction;
}

使用:

@PostMapping("SetCarMove")
public CarStatus firstQuestion(@RequestBody @Validated CarStatus car) {// 相当于省略下面两句话/*if (car == null || (!"Start".equals(car.getCarAction()) && !"Stop".equals(car.getCarAction()))) {throw new CarStatusException(StatusCode.CAR_STATUS_ERROR,"参数不正确");}*/System.out.println(car);return car;
}

常用注解

@null           验证对象是否为空
@notnull     验证对象是否为非空
@asserttrue       验证 boolean 对象是否为 true
@assertfalse      验证 boolean 对象是否为 false
@min           验证 number 和 string 对象是否大等于指定的值
@max           验证 number 和 string 对象是否小等于指定的值
@decimalmin    验证 number 和 string 对象是否大等于指定的值,小数存在精度
@decimalmax    验证 number 和 string 对象是否小等于指定的值,小数存在精度
@size           验证对象(array,collection,map,string)长度是否在给定的范围之内
@digits       验证 number 和 string 的构成是否合法
@past           验证 date 和 calendar 对象是否在当前时间之前
@future       验证 date 和 calendar 对象是否在当前时间之后
@pattern     验证 string 对象是否符合正则表达式的规则
@Email     验证邮箱

例子

@size (min=3, max=20, message="用户名长度只能在3-20之间")
@size (min=6, max=20, message="密码长度只能在6-20之间")
@pattern (regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}", message="邮件格式错误")
@Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间")
@Email(message = "比如输入正确的邮箱")
@NotNull(message = "用户名称不能为空")
@Max(value = 100, message = "年龄不能大于100岁")
@Min(value= 18 ,message= "必须年满18岁!" )
@AssertTrue(message = "bln4 must is true")
@AssertFalse(message = "blnf must is falase")
@DecimalMax(value="100",message="decim最大值是100")
DecimalMin(value="100",message="decim最小值是100")
@NotNull(message = "身份证不能为空")
@Pattern(regexp="^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message="身份证格式错误")

高阶:自定义validator

因为validator框架支持的注解有限,不可能方方面面都支持,故需要自定义注解。

以手机号码为例子,写一个校验的validator注解。

步骤一:写一个注解

@Documented
@Constraint(validatedBy = CarStateValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CarState {String message() default "请输入正确的手机号码";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE,ElementType.CONSTRUCTOR,ElementType.PARAMETER})@interface List {CarState[] value();}
}

步骤二:写出注解的实现类

public class CarStateValidator implements ConstraintValidator<CarState,String> {private static final Pattern CAR_STATE_PATTERN = Pattern.compile("^(Start)|(Stop)$");@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {if (s == null || s.length() == 0){return true;}Matcher m = CAR_STATE_PATTERN.matcher(s);return m.matches();}@Overridepublic void initialize(CarState constraintAnnotation) {}
}

步骤三:给vo类对应的属性加上注解

@CarState

SpringBoot中的Validator参数校验器——通过注解的方式控制controler接收参数的规则相关推荐

  1. Springboot中EasyExcel导出及校验后导入前后台功能实现

    EasyExcel导出及校验后导入前后台功能实现 一.引入maven依赖 1. 在pom.xml中引入maven依赖 二.实体类及工具类 1. 导入时的自定义校验注解 2. 格式校验工具类 3. Ex ...

  2. SpringBoot中对于异常处理的提供的五种处理方式

    SpringBoot中对于异常处理的提供的五种处理方式 参考文章: (1)SpringBoot中对于异常处理的提供的五种处理方式 (2)https://www.cnblogs.com/weirdo-l ...

  3. SpringBoot的参数校验器 - Validator

    1.前提 在日常的开发中,服务端对象的校验是非常重要的一个环节,比如注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确. 但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很 ...

  4. springboot中hibernate validator校验模式,分组校验,自定义校验

    检验模式 上面例子中一次性返回了所有验证不通过的集合,通常按顺序验证到第一个字段不符合验证要求时,就可以直接拒绝请求了.Hibernate Validator有以下两种验证模式: 普通模式(默认是这个 ...

  5. 【Spring】Spring hibernate JSR-303 Validator 自定义参数校验器

    1.概述 在默认的情况下 Spring Boot 会引入关于 Hibernate Validator 机制来支持 JSR-303 验证规范:另外一方面 , 因为业务会 比较复杂,所以需要 自 定义验证 ...

  6. springboot中的过滤器、拦截器、监听器整合使用

    文章目录 controller层 过滤器 拦截器 拦截器介绍 使用拦截器 监听器 监听器介绍 使用监听器 修改启动类 controller层 用于测试 @RestController public c ...

  7. Springboot中优雅进行字段校验

    欢迎关注方志朋的博客,回复"666"获面试宝典 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如何做参数校验呢? | Contro ...

  8. 【SpringBoot】61、SpringBoot中使用谷歌身份验证器(Google Authenticator)实现二步身份验证

    Google 身份验证器 Google Authenticator 是谷歌推出的基于时间的一次性密码 (Time-based One-time Password,简称 TOTP),只需要在手机上安装该 ...

  9. SpringBoot中的序列化和反序列化器,如何成为史上最强“编解码大师”?

最新文章

  1. nginx在linux下安装,Nginx在linux下安装及简单命令
  2. html5通html5通,HTML5 history详解
  3. ASP.NET 自定义404错误页面
  4. Celery简介及Docker测试环境搭建
  5. MySQL分组查询—按函数分组
  6. Java 多线程(一) 基础知识与概念
  7. html5 canvas 图像预览,html5-canvas 加载并显示图像
  8. Java基础篇4——数组
  9. 有什么软件可以测试手机gprs,哪个软件可通过GPRS发信息啊?
  10. python基础7--socket
  11. Debian系、红帽系、Arch Linux系如何选择安装包
  12. 友情链接交换工具使用方法
  13. CentOS查看文件夹大小
  14. mysql备份怎么锁库_mysql备份数据库 怎么锁表
  15. 网络攻防技术——域名信息
  16. PMEdit一个富文本框可以编辑文本、图片并可以显示GIF动画
  17. 学生信息管理系统之用户登录:用户登录流程
  18. 后台管理系统登录思路
  19. 多元统计分析最短距离法_多元统计分析第10讲(聚类分析:动态聚类)
  20. 计算机程序设计员教程,国家职业资格培训教程计算机程序设计员(基础知识).ppt...

热门文章

  1. Influx-stress原理(初学)
  2. Linux三权分立配置
  3. 知识库软件应该具备的7个基本功能
  4. 服务器运行打开一直转圈,快速解决登录PC端一直转圈数据读取中,不能进入正常聊天界面...
  5. 2019年ipa发布苹果应用商店审核指南
  6. 视频如何做成gif动图?一招教你快速生成gif动画
  7. IBM咨询提出无边界企业,必须了解的数字化转型大趋势
  8. 票据系统对子票区间的一个应用
  9. Android---使用-ContentProvider-无侵入获取-Context
  10. 可以表白的生日祝福(附源码与修改教程)