javascript
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校验使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 投简历的格式(第一分简历)
- 下一篇: 日本标点符号的输入总结