我们经常需要对接口的请求参数进行校验,在没有使用validation之前都是用if去做校验的,但这样通常需要写一长串的if语句,使代码看起来非常臃肿,即使将这些校验封装到一个方法或是类中,然后调用,但本质上并没有改变什么。
validation校验可以方便的解决上述问题,只需在请求参数的DTO类的属性上加上对应的注解。它就能帮助我们在执行接口方法之前提前进行参数校验。我们常用的校验如判空@NotNull @NotBlank,或是对参数的大小、长度等都能进行校验,甚至可以使用正则表达式。
使用时只需在DTO上加上注解

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;/*** @author TangHaiZhi* @date 2021/8/20*/
@Data
@Api("行业")
public class IndustryDTO implements Serializable {private static final long serialVersionUID = 1L;private Long id;@NotBlank(message = "行业名称不能为空")@ApiModelProperty("行业名称")private String industryName;@ApiModelProperty("状态0-关闭 1-启用")private Long status;@ApiModelProperty("分页开始")private int page = 0;@ApiModelProperty("每页数据行数")private int size = 10;
}

再在对应的接口上加上注解@Valid

@ApiOperation(value = "新增行业")
@PostMapping(value = "/xxx/xxx/addIndustry",consumes = "application/json")
ResultModel<IndustryVO> addIndustry(@Valid @RequestBody IndustryDTO var1);

这样在调用新增接口时如果参数industryName为空或空字符串,validation会自动帮我们抛出校验错误:行业名称不能为空

分组校验

有些时候可能我们新增修改接口请求参数用到的是同一个实体作为入参,但是有些参数在新增时是不用的,在修改时却需要填写。比如主键id,这时候单纯的一个@NotNull注解并不能达成这样的要求,我们需要引入分组校验。
先定义两个组

public interface AddGroup {}public interface UpdateGroup {}

然后将入参实体改造一下,给validation注解加上组

@Data
@Api("行业")
public class IndustryDTO implements Serializable {private static final long serialVersionUID = 1L;@NotNull(message = "id不能为空", groups = UpdateGroup.class)private Long id;@NotBlank(message = "行业名称不能为空",groups = AddGroup.class)@NotBlank(message = "行业名称不能为空", groups = UpdateGroup.class)@ApiModelProperty("行业名称")private String industryName;@ApiModelProperty("状态0-关闭 1-启用")private Long status;@ApiModelProperty("分页开始")private int page = 0;@ApiModelProperty("每页数据行数")private int size = 10;
}

在接口上也需要声明本接口在校验时需要调用的是哪个组的校验规则

/*** @author TangHaiZhi* @date 2021/8/20*/
@Api(value = "运营解决方案行业")
@Validated
@Feign(serviceName = "xxxService")
public interface OperationIndustryFeign {@ApiOperation(value = "新增行业")@Validated(AddGroup.class)@PostMapping(value = "/xxx/xxx/addIndustry",consumes = "application/json")ResultModel<IndustryVO> addIndustry(@Valid @RequestBody IndustryDTO var1);@ApiOperation(value = "修改行业")@Validated(UpdateGroup.class)@PostMapping(value = "/xxx/xxx/updateIndustry",consumes = "application/json")ResultModel<IndustryVO> updateIndustry(@Valid @RequestBody IndustryDTO var1);@ApiOperation(value = "查询全部行业")@PostMapping(value = "/xxx/xxx/queryIndustry",consumes = "application/json")ResultModel<List<IndustryVO>> queryIndustry(@RequestBody IndustryDTO var1);
}

这样在新增时会调用add组的校验规则去校验行业名称,在修改时会调用update组的校验规则去校验id和行业名称,而在查询时则不会进行任何校验

validation校验 @NotNull @NotBlank及分组校验相关推荐

  1. Spring 使用 JSR303自定义校验注解+分组校验

    我们有这样一个需求,想要校验一个int类型的变量,校验它的值必须为我们所指定的值,且在修改状态分组时生效. @ListValue(vals = {0, 1}, groups = {UpdateStat ...

  2. SpringBoot - 优雅的实现【参数分组校验】高级进阶

    文章目录 Pre 需求 实现三部曲 Step1 定义分组接口 Step2 给参数分配分组 Step3 指定分组 Step4 验证 源码 Pre SpringBoot - 优雅的实现[参数校验]高级进阶 ...

  3. validation 分组校验注解大全及使用详解

    JSR303(Bean的校验框架)的注解,在 controller 的方法中验证时(运行时校验属性)使用,如果不合法(校验失败),注解中的提示信息会保存在 result 中. JSR提供的校验注解: ...

  4. Bean Validation数据校验和分组校验

    前端校验后,为什么需要后端校验 在前面完成数据参数绑定到Controller时,我们可以在@RequestParam注解中做简单的空校验,就是设置required属性为true,以此来指定Contro ...

  5. 表单校验之@NotBlank,@NotNull,@NotEmpty之间的区别

    @NotBlank一般用来校验String类型不能为空 @NotNull一般用来校验Integer类型不能为空 @NotEmpty一般用来校验List类型不能为空

  6. Spring Boot参数校验以及分组校验的使用

    简介:做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句.虽然这种方式简单直接,但会大大降低开发效率和代码可读性. ...

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

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

  8. java分组校验_SpringBoot @Validated注解实现参数分组校验的方法实例

    前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. org.springframework.bo ...

  9. @Validated注解详解,分组校验,嵌套校验,@Valid和@Validated 区别,Spring Boot @Validated

    技术栈: spring boot 2.3.3.RELEASE hibernate-validator 文末附项目源代码 目录 简述 项目依赖 全局异常处理类 基础参数校验 实体类 控制类 测试 嵌套参 ...

最新文章

  1. 1-2 postman工具简介
  2. sudo提升执行权限
  3. 爬虫中之Requests 模块的进阶
  4. 向量距离计算 java_Milvus 向量搜索引擎开源了!
  5. Licia:最全最实用的 JavaScript 工具库
  6. [译]如何在C#中调试LINQ查询
  7. 数据结构java语言描述朱战立_数据结构——树(Java语言描述)
  8. 线程中这么调用类_一文学会 Python 多线程编程
  9. java linux命令远程执行_java执行远程服务器上的shell命令
  10. 求两条直线(线段)的交点
  11. 前端一键复制粘贴插件——clipboard.js的使用
  12. 命名实体识别Baseline模型BERT-MRC总结
  13. 如何修改apk文件,改之理简单使用教程
  14. 沟通中的情绪管理(演讲稿)
  15. 如何开通微信小程序在线客服系统?
  16. iOS 图片编辑——涂鸦——在图片上添加文字
  17. SAS逻辑回归之多分类
  18. 【计算机毕业设计】基于微信小程序的校园二手交易平台
  19. 体育和旅游融合成为今夏显著的旅行趋势
  20. 手把手教你Linux虚拟机安装(超详细)

热门文章

  1. 关机状态下启动微型计算机叫做,湖南省计算机等级考试题库
  2. oracle收购了什么意思,BEA为何会被Oracle收购?
  3. 微型计算机原理daa,单片微机原理、汇编与C51及接口技术(第2版)
  4. C Primer Plus 读书笔记(二)
  5. markdwon常用格式
  6. 计算天数(Python实现)
  7. 电子商务系统的设计与实现(十一):数据库设计
  8. Celery异步任务
  9. [原] 手擀寿面祝妈妈生日快乐
  10. 旧金山大学的算法可视化学习教程 赞的教程,将抽象的算法可视化,易于理解