目录

前言

一、JSR303是什么?

二、基本使用

1.引入依赖

2.在类上加上注解

3.注解解释

4.随后在controller接收参数的时候加上个@Validated

三、分组使用

1.我们定义不同的接口类型(空接口)表示不同的分组

2.在类中的属性添加注解属性的时候需要指明分组的名字

3.在Controller方法中启动校验规则指定要使用的分组名

注意


前言

在日常开发中,我们现在是否在service里面对接口接收的参数进行校验,其实这种方法也是行得通,但是若接口接收的是一个类,类里面有很多属性,这时我们对类里的一个个属性进行校验是比较麻烦的,如下面代码:

public CourseBaseInfoDto addCourse(Long companyId, AddCourseDto dto) {//合法性校验,对类中每个属性进行校验if (StringUtils.isBlank(dto.getName())) {throw new XueChengPlusException("课程名称为空");}if (StringUtils.isBlank(dto.getMt())) {throw new XueChengPlusException("课程分类为空");}if (StringUtils.isBlank(dto.getSt())) {throw new XueChengPlusException("课程分类为空");}if (StringUtils.isBlank(dto.getGrade())) {throw new XueChengPlusException("课程等级为空");}if (StringUtils.isBlank(dto.getTeachmode())) {throw new XueChengPlusException("教育模式为空");}if (StringUtils.isBlank(dto.getUsers())) {throw new XueChengPlusException("适应人群");}if (StringUtils.isBlank(dto.getCharge())) {throw new XueChengPlusException("收费规则为空");}
}

所以我们需要借助 JSR303校验,就是简单在类中加几个注解,就可以在controller中对接口的参数进行校验,大大增加开发的效率


一、JSR303是什么?

早在JavaEE6规范中就定义了参数校验的规范,它就是JSR-303,它定义了Bean Validation,即对bean属性进行校验。

SpringBoot提供了JSR-303的支持,它就是spring-boot-starter-validation,它的底层使用Hibernate Validator,Hibernate Validator是Bean Validation 的参考实现。

二、基本使用

1.引入依赖

spring-boot-starter-validation的依赖 :

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.在类上加上注解

就以上面那个类为示例给类的属性加上校验注解:

@Data
@ApiModel(value="AddCourseDto", description="新增课程基本信息")
public class AddCourseDto {@NotEmpty(message = "课程名称不能为空")@ApiModelProperty(value = "课程名称", required = true)private String name;@NotEmpty(message = "适用人群不能为空")@Size(message = "适用人群内容过少",min = 10)@ApiModelProperty(value = "适用人群", required = true)private String users;@ApiModelProperty(value = "课程标签")private String tags;@NotEmpty(message = "课程分类不能为空")@ApiModelProperty(value = "大分类", required = true)private String mt;@NotEmpty(message = "课程分类不能为空")@ApiModelProperty(value = "小分类", required = true)private String st;@NotEmpty(message = "课程等级不能为空")@ApiModelProperty(value = "课程等级", required = true)private String grade;@ApiModelProperty(value = "教学模式(普通,录播,直播等)", required = true)private String teachmode;@ApiModelProperty(value = "课程介绍")private String description;@ApiModelProperty(value = "课程图片", required = true)private String pic;@NotEmpty(message = "收费规则不能为空")@ApiModelProperty(value = "收费规则,对应数据字典", required = true)private String charge;@ApiModelProperty(value = "价格")private BigDecimal price;}

3.注解解释

4.随后在controller接收参数的时候加上个@Validated

@ApiOperation("新增课程基础信息")@PostMapping("/course")public CourseBaseInfoDto createCourseBase(@RequestBody @Validated({ValidationGroups.Update.class}) AddCourseDto addCourseDto){return courseBaseInfoService.addCourse(1L,addCourseDto);}

三、分组使用

因为我们不同的业务,可能需要不同的校验规则,所以我们需要使用分组校验

1.我们定义不同的接口类型(空接口)表示不同的分组

/*** @description 校验分组*/
public class ValidationGroups {//插入数据的校验分组public interface Insert{};//更新数据的校验分组public interface Update{};//删除数据的校验分组public interface Delete{};}

2.在类中的属性添加注解属性的时候需要指明分组的名字

@NotEmpty(groups = {ValidationGroups.Insert.class},message = "添加课程名称不能为空")@NotEmpty(groups = {ValidationGroups.Update.class},message = "修改课程名称不能为空")
// @NotEmpty(message = "课程名称不能为空")@ApiModelProperty(value = "课程名称", required = true)private String name;

3.在Controller方法中启动校验规则指定要使用的分组名

@ApiOperation("新增课程基础信息")
@PostMapping("/course")
public CourseBaseInfoDto createCourseBase(@RequestBody @Validated({ValidationGroups.Insert.class}) AddCourseDto addCourseDto){//机构id,由于认证系统没有上线暂时硬编码Long companyId = 1L;return courseBaseInfoService.createCourseBase(companyId,addCourseDto);
}

再次测试,由于这里指定了Insert分组,所以抛出 异常信息:添加课程名称不能为空。

如果修改分组为ValidationGroups.Update.class,异常信息为:修改课程名称不能为空。

注意:

若在Controller方法中启动校验规则指定要使用的分组名,那只能对带有这个分组名的校验注解的属性进行校验

本文参考于黑马程序员的学成在线课程的资料

JSR303校验使用相关推荐

  1. SpringBoot给属性赋值的几种方式以及JSR303校验

    一.@ConfigurationProperties的作用: 将配置文件中配置的每一个属性的值映射到这个组件中; 告诉SpringBoot将本来中的所有属性和配置文件中的相关配置进行绑定; 参数 pr ...

  2. JSR303校验的简单使用以及自定义校验规则的代码编写

    文章目录 一.JSR303校验 1.简介 2.相关注解 3.JSR303依赖包 二.JSR303自带的校验规则 1.在JavaBean上添加校验规则 2.生效校验规则 2.1 controller返回 ...

  3. JSR303 校验失败

    错误原因 我分组了,但是controller方法参数用的是注解@Valid,而且改成@Validated之后忘记指定分组了.. 导致根本就没有校验. 补充 1.是否导包 (我的是Spring Boot ...

  4. JSR303校验前端传递的数据

    介绍 JSR-303规范(Bean Validation规范)提供了对 Java EE 和 Java SE 中的 Java Bean 进行验证的方式.该规范主要使用注解的方式来实现对 Java Bea ...

  5. Spring Boot使用JSR303校验

    文章目录 前言 一.JSR303简介 二.JSR303定义的注解 三.Hibernate Validator定义的注解 四.使用方式 1.Hibernate Validator使用方法 2.Sprin ...

  6. JSR303校验之list校验问题

    现有需求如下: 新增合同时要保存补贴和费用项信息,由于都是多条,所以用list传参,但不是必传项,不传的时候不校验list中的对象,传的时候就要校验list中对象每个字段都不能为空 也就是要通过JSR ...

  7. JSR-303校验类型

    空检查 @Null       验证对象是否为null @NotNull    验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Trim的长 ...

  8. 后端JSR303校验

    文章目录 一.导入依赖 二.在需要检查的属性上添加注解 三.在控制器方法中使用 四.前端从后端中获取到相关信息以后进行相应操作 ==校验类型注解== 一.导入依赖 <!-- https://mv ...

  9. JSR303校验之@NotEmpty注解

    @NotEmpty注解失败的原因: 没有使用@Validated或者@Valid注解,原因如下:对JavaBean的属性值进行校验前会首先判断是否存在@Validated或者@Valid注解,只有存在 ...

最新文章

  1. Ubuntu下安装Cppcheck源码操作步骤
  2. cocos2d笔记——解析HelloWorldScene
  3. Linux上调整sshd进程的优先级
  4. Linux虚拟内存与线性地址翻译
  5. C#将文件压缩或者解压
  6. MSP430F5XXX中的ADC12使用
  7. python集合的基本操作不包括_Python基础知识储备,List集合基本操作大盘点
  8. Dede 删除文档同时文章中的图片的方法
  9. 卷王李富贵算法每日一题--分治算法(三)--逃亡
  10. java8 Optional源码
  11. Non-standard serial port baud rate setting
  12. 大数据之-Hadoop3.x_Yarn_容量调度器---大数据之hadoop3.x工作笔记0145
  13. 游戏 Npk文件解压
  14. 苹果 Apple Id 不同区域的不同点
  15. RuntimeError: latex was not able to process the following string: b‘lp‘
  16. java oio与bio_OIO在java中意味着什么?
  17. UA原生grid(sit-item-collection-viewer)主子表联动(直接用实体查询)、列表样式的新增
  18. 电商类微信平台推广方法有哪些?
  19. NIST随机数测试软件下载,安装、和使用,分析方法最新版(19年4月)
  20. 攻防世界 web NaNNaNNaNNaN-Batman

热门文章

  1. 安卓android+rom定制,移植,安卓Android ROM定制移植教程.doc
  2. Unity Shader 实现透明护盾效果
  3. REUSE_ALV_GRID_DISPLAY_LVC-可编辑单元格
  4. U盘出现物理故障都有哪些表现
  5. 2021年G3锅炉水处理考试内容及G3锅炉水处理模拟试题
  6. [计算机网络] 实验 5 电子邮件
  7. 深度可分离卷积的Depth,Stack,Channel Multiplier
  8. webview在android8.0,解决Android8.0系统应用打开webView报错
  9. 2015062801 - 祈福八仙水上乐园
  10. 网址或者app被入侵了怎么办?