SpringBoot提供了JSR-303的支持,它就是spring-boot-starter-validation,它的底层使用Hibernate Validator,Hibernate Validator是Bean Validation 的参考实现。
只需要加入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
使用方法很简单,加入注解即可
@NotEmpty(message = "不能为空") private String m;
定义好校验规则还需要开启校验,在controller方法中添加@Validated注解,如下:
@ApiOperation("新增信息")
@PostMapping("/add")
public R create(@RequestBody @Validated AddDto addDto){
//...
}常用注解如下:

不再一一赘述
这里主要看全局校验类
只要捕获MethodArgumentNotValidException类即可。
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e){
BindingResult bindingResult = e.getBindingResult();
//存储错误信息
List<String> errors = new ArrayList<>();
bindingResult.getFieldErrors().stream().forEach(item->{
errors.add(item.getDefaultMessage());
});
//将list中的错误信息拼接起来
String errMessage = StringUtils.join(errors, ",");
//记录异常
log.error("系统异常{}",e.getMessage(),errMessage);
//解析出异常信息
RestErrorResponse restErrorResponse = new RestErrorResponse(errMessage);
return restErrorResponse;
}如果多个逻辑使用同一个实体类,而需要定义异常不相同,则可以使用分组校验
分组校验也很简单
首先定义一个校验分组类
package com.dreams.base.exception;
/**
* @author PoemsAndDreams
* @date 2024-02-05 14:23
* @description //TODO 校验分组
*/
public class ValidationGroups {
public interface Inster{};
public interface Update{};
public interface Delete{};
}在实体类加上注解
如:
@NotEmpty(message = "添加名称不能为空",groups = {ValidationGroups.Inster.class})
@NotEmpty(message = "修改名称不能为空",groups = {ValidationGroups.Update.class})
@ApiModelProperty(value = "名称", required = true)
private String name;只要在controller指定ValidationGroups.Inster.class即可
@ApiOperation("新增")
@PostMapping("/add")
public R create(@RequestBody @Validated({ValidationGroups.Inster.class}) AddCourseDto addCourseDto){
//...
}


