Spring Boot 统一处理参数校验结果异常@Valid BindException MethodArgumentNotValidException
使用@ControllerAdvice统一处理参数校验的结果
如果你使用了@RequestBody @Valid 来封装参数并校验,这个时候这个异常处理器又不起作用了,需要再添加一个异常处理器
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
@Slf4j
public class ExceptionAdvice {
@ExceptionHandler(BindException.class)
public Result<?> bindExceptionHandler(BindException e) {
log.warn(e.getMessage(), e);
FieldError error = e.getFieldError();
String message = String.format("%s:%s", error.getField(), error.getDefaultMessage());
return Result.error(message);
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result<?> exceptionHandler(MethodArgumentNotValidException e) {
log.warn(e.getMessage(), e);
FieldError error = e.getBindingResult().getFieldError();
String message = String.format("%s:%s", error.getField(), error.getDefaultMessage());
return Result.error(message);
}
}