springboot中参数校验(validation)使用
文章目录
- 介绍:
- validation引入
- 可用约束(constraint)
- 应用实战
- 实体类
- 接口参数型
- 约束生效
- 实体型
介绍:
在开发中,会经常需要进行参数的校验,比如接口层、业务层、持久层等,其中接口的参数校验就是最为常见的。这里就来看一下springboot中参数校验(validation)的使用。
validation引入
在springboot官方文档上对validation的使用介绍中,说明了只要JSR-303实现(例如Hibernate验证器)在类路径上,Bean Validation 1.1支持的方法验证功能就会自动启用。为此springboot为我们提供了一个 validation starter:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><!--<version>2.1.0.RELEASE</version>-->
</dependency>
里面校验的核心依赖就是JSR-303标准的实现(Hibernate验证器):
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId>
</dependency>
这个不需要添加 已经包含在内了
如果我们在进行web开发的话,就不需要在引用“spring-boot-starter-validation”了,因为“spring-boot-starter-web”中已经引用了“hibernate-validator”。
可用约束(constraint)
hibernate-validator沿用了validation-api中的所有注解约束,同时也定义了一些自己的约束:
应用实战
约束应用
实体类
首先是使用约束性注解,在实体型参数上使用,代码样例如下:
/*** @author lazycece* @date 2019/02/15*/
@Setter
@Getter
@ToString
public class UserInfoReq {@NotNull(message = "id不能为null", groups = {Update.class})private Long id;@NotBlank(message = "username不能为空")private String username;@NotNull(message = "age不能为null")@Min(value = 1, message = "年龄不符合要求")@Max(value = 200, message = "年龄不符合要求")private Integer age;
}
接口参数型
在接口参数上使用,代码样例如下:
@GetMapping("/query")
public String queryUserInfo(@NotBlank(message = "username不能为空") String username) {log.info("查询用户成功: {}", username);return "success";
}
约束生效
要使我们添加的约束注解生效,那么还得使用另一个注解:@Validated 或者 @Valid(只针对实体性有用)。
实体型
要使得实体性参数生效,需要在接口参数上添加 @Validated 或者 @Valid 注解。代码样例如下:
@PutMapping("/add")
public String addUserInfo(@Validated UserInfoReq req) {log.info("添加用户成功: {}", req.toString());return "success";
}
@PostMapping("/update")
public String updateUserInfo(@Validated(value = {Update.class}) UserInfoReq req) {log.info("更新用户成功: {}", req.toString());return "success";
}
而最好使用@Validated,因为它可以使用验证组,使得某一个参数只针对属于该组的情况下验证生效,如实体参数中使用:
@NotNull(message = "id不能为null", groups = {Update.class})
private Long id;
然后生效注解上加上组:
@Validated(value = {Update.class})
这样即表示,参数id的验证只针对更新操作(update)生效,而在执行添加操作(add)的时候是不验证的。
接口参数型
要使得接口参数型的验证生效,是必须在里面加@Validated注解的。(此类型和实体性验证失败所产生的异常是不同的)
springboot中参数校验(validation)使用相关推荐
- jsr 正则验证_使用 Bean Validation 解决业务中参数校验
痛点及现状 代码中常常见到如下代码: if (Objects.equal(0L ,repertory)){ return ApiResultMap.errorResult(-1 ,"操作数量 ...
- Java参数校验validation和validator区别
Java参数校验validation和validator区别 1. 参数校验概述 2. validation与validator区别 3. validation注解说明 4. validator注解说 ...
- springboot参数校验validation
文章目录 1. 引入 2. 基本使用 2.1 引入依赖 2.2 基本使用 2.3 注解介绍 2.4 返回值完善 2.5 统一异常处理 2.6 @Valid和@Validate注解 3. 分组校验 4. ...
- SpringBoot:参数校验的使用(validator)
文章目录 SpringBoot参数校验的使用(validator) 一.validator简介 二.注解介绍 内置注解 扩展注解 三.validator的使用(手动校验) 创建校验工具类 对一个对象进 ...
- Springboot @Validated参数校验
简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现.hibernate validation是对这个规范的实现,并增加了校验注解如@Em ...
- 校验json格式_不来学一下SpringBoot统一参数校验?
微服务架构之春招总结:SpringCloud.Docker.Dubbo与SpringBoot 一个SpringBoot问题就干趴下了?我却凭着这份PDF文档吊打面试官. 金三银四第一天,啃透这些Spr ...
- e0312 不存在用户定义的_更加灵活的参数校验,Spring-boot自定义参数校验注解
上文我们讨论了如何使用@Min.@Max等注解进行参数校验,主要是针对基本数据类型和级联对象进行参数校验的演示,但是在实际中我们往往需要更为复杂的校验规则,比如注册用户的密码和确认密码进行校验,这个时 ...
- SpringBoot里参数校验/参数验证
1.前言 在控制器类的方法里自己写校验逻辑代码当然也可以,只是代码比较丑陋,有点"low".业界有更好的处理方法,分别阐述如下. 2.PathVariable校验 @GetMapp ...
- SpringBoot的参数校验器 - Validator
1.前提 在日常的开发中,服务端对象的校验是非常重要的一个环节,比如注册的时候:校验用户名,密码,身份证,邮箱等信息是否为空,以及格式是否正确. 但是这种在日常的开发中进行校验太繁琐了,代码繁琐而且很 ...
最新文章
- MFC SetWindowPos
- java 线程 插件_我的第一个Chrome插件:天气预报应用
- IntelliJ IDEA for Mac如何管理SDK/JDK,模块如何设置SDK/JDK?
- 《面向对象程序设计》课程作业二
- oracle 表空间 碎片,Oracle表空间碎片整理
- NumPy Beginner's Guide 2e 带注释源码 二、NumPy 基础入门
- cropbox php,jQuery用户头像裁剪插件cropbox.js使用详解
- 【网上商城】--图片保存位置分析
- android密度计算器,密度计算器
- python弹幕点歌_GitHub - smilecc/blive-raspberry: 完全重构的树莓派B站直播弹幕点播台...
- DSL是什么意思?Mbps是什么意思?
- spring终极宝典
- 图片放大缩小js工具
- 考研英语——长难句语法
- 自动驾驶汽车是如何利用高精度地图和高精度定位来进行“导航”的
- linux必看书籍推荐
- AutoHotKey方向键组合
- 【JS】AMD,CMD,CommenJS和ES6
- 买工业路由器看什么参数
- 基于 mPaaS 框架 Portal-Bundle 接入方式下 Multidex 分包失效的解决方法