欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

JSR303校验使用

发布时间:2024/3/13 javascript 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 JSR303校验使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

前言

一、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校验使用的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。