SpringBoot中的Validator参数校验器——通过注解的方式控制controler接收参数的规则
前言
在日常的接口开发中,经常要对接口的参数做校验,例如,登录的时候要校验用户名密码是否为空。但是这种日常的接口参数校验太烦锁了,代码繁琐又多。
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接收参数的规则相关推荐
- Springboot中EasyExcel导出及校验后导入前后台功能实现
EasyExcel导出及校验后导入前后台功能实现 一.引入maven依赖 1. 在pom.xml中引入maven依赖 二.实体类及工具类 1. 导入时的自定义校验注解 2. 格式校验工具类 3. Ex ...
- SpringBoot中对于异常处理的提供的五种处理方式
SpringBoot中对于异常处理的提供的五种处理方式 参考文章: (1)SpringBoot中对于异常处理的提供的五种处理方式 (2)https://www.cnblogs.com/weirdo-l ...
- SpringBoot的参数校验器 - Validator
1.前提 在日常的开发中,服务端对象的校验是非常重要的一个环节,比如注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确. 但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很 ...
- springboot中hibernate validator校验模式,分组校验,自定义校验
检验模式 上面例子中一次性返回了所有验证不通过的集合,通常按顺序验证到第一个字段不符合验证要求时,就可以直接拒绝请求了.Hibernate Validator有以下两种验证模式: 普通模式(默认是这个 ...
- 【Spring】Spring hibernate JSR-303 Validator 自定义参数校验器
1.概述 在默认的情况下 Spring Boot 会引入关于 Hibernate Validator 机制来支持 JSR-303 验证规范:另外一方面 , 因为业务会 比较复杂,所以需要 自 定义验证 ...
- springboot中的过滤器、拦截器、监听器整合使用
文章目录 controller层 过滤器 拦截器 拦截器介绍 使用拦截器 监听器 监听器介绍 使用监听器 修改启动类 controller层 用于测试 @RestController public c ...
- Springboot中优雅进行字段校验
欢迎关注方志朋的博客,回复"666"获面试宝典 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如何做参数校验呢? | Contro ...
- 【SpringBoot】61、SpringBoot中使用谷歌身份验证器(Google Authenticator)实现二步身份验证
Google 身份验证器 Google Authenticator 是谷歌推出的基于时间的一次性密码 (Time-based One-time Password,简称 TOTP),只需要在手机上安装该 ...
- SpringBoot中的序列化和反序列化器,如何成为史上最强“编解码大师”?
最新文章
- nginx在linux下安装,Nginx在linux下安装及简单命令
- html5通html5通,HTML5 history详解
- ASP.NET 自定义404错误页面
- Celery简介及Docker测试环境搭建
- MySQL分组查询—按函数分组
- Java 多线程(一) 基础知识与概念
- html5 canvas 图像预览,html5-canvas 加载并显示图像
- Java基础篇4——数组
- 有什么软件可以测试手机gprs,哪个软件可通过GPRS发信息啊?
- python基础7--socket
- Debian系、红帽系、Arch Linux系如何选择安装包
- 友情链接交换工具使用方法
- CentOS查看文件夹大小
- mysql备份怎么锁库_mysql备份数据库 怎么锁表
- 网络攻防技术——域名信息
- PMEdit一个富文本框可以编辑文本、图片并可以显示GIF动画
- 学生信息管理系统之用户登录:用户登录流程
- 后台管理系统登录思路
- 多元统计分析最短距离法_多元统计分析第10讲(聚类分析:动态聚类)
- 计算机程序设计员教程,国家职业资格培训教程计算机程序设计员(基础知识).ppt...