一、区分@Valid和@Validated
- @Valid属于javax.validation.Valid
- @Validaated属于javax.validation
- @Validated是spring对@Valid做的二次封装,扩展了分组验证的规则
二、@Valid的使用
- pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 实体类添加规则,规则可自行百度
- controller传参数添加验证,验证方法有两种
- 1.每次传参进行验证
@PostMapping("add-user")
public ResultVo addUser (@RequestBody @Valid UserDto userDto, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return new ResultVo("A0001", bindingResult.getAllErrors().get(0).getDefaultMessage());
}
return userService.insertUser(userDto);
}
添加BindingResult
- 2.全局异常捕获,配合日志进行记录,不需要每次进行验证(推荐)
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
private final static String EXCEPTION_MSG_KEY = "Exception message : ";
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResultVo handleValidException(MethodArgumentNotValidException e){
//日志记录错误信息
log.error(Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
//将错误信息返回给前台
return new ResultVo("A0001", Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
}
}