- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 参数校验
public class AddCourseDto {
@NotEmpty(message = "课程名称不能为空", groups = ValidationGroups.ValidationInsert.class)
private String name;
}
由于不同的情况校验规则不同,所以需要分组
3. 分组
public class ValidationGroups {
public interface ValidationInsert {
}
public interface ValidationUpdate {
}
public interface ValidationDelete {
}
}
- controller 开启校验
@PostMapping("/course")
public CourseBaseInfoDto addCourse(@RequestBody @Validated(value = ValidationGroups.ValidationInsert.class) AddCourseDto addCourseDto) {
//机构id,由于认证系统没有上线暂时硬编码
Long companyId = 1232141425L;
return courseBaseInfoService.createCourseBase(companyId, addCourseDto);
}
- 异常捕获
//捕获jsr303校验框架抛出的异常
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse validationException(MethodArgumentNotValidException e) {
//记录异常
log.error("系统异常{}", e.getMessage(), e);
BindingResult bindingResult = e.getBindingResult();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
StringBuilder msg = new StringBuilder();
fieldErrors.forEach(error -> msg.append(error.getDefaultMessage()).append(","));
//解析出异常信息
return new RestErrorResponse(msg.deleteCharAt(msg.length() - 1).toString());
}