- Hibernate Validator 检验框架主要包含两种错误
错误类型 |
描述 |
MethodArgumentNotValidException |
用于处理表单提交时的数据校验 |
BindException |
用于处理请求参数绑定时的错误 |
- 为了捕获检验框架抛出的异常,我们需要在全局错误处理类中加入对以上两种错误的处理,然后通过获取反射获取对应异常类中的错误信息,将所有异常信息拼接成字符串返回给响应体
示例
@RestControllerAdvice public class GlobalExceptionAdvice { @ExceptionHandler(BindException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ErrorResult doViolationException(BindException ex) { StringBuilder errorMessage = new StringBuilder(); List<FieldError> allErrors = ex.getFieldErrors(); StringJoiner joiner = new StringJoiner(", "); allErrors.forEach(fieldError -> joiner.add(fieldError.getField() + fieldError.getDefaultMessage())); errorMessage.append(joiner); log.error("请求参数异常信息 ex={}", errorMessage); //记录日志 //发送特定消息给运维人员,提醒维护 return ErrorResult.fail(ResultCode.BAD_REQUEST, errorMessage.toString()); }
@ExceptionHandler({MethodArgumentNotValidException.class}) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ErrorResult doMethodArgumentNotValidException(MethodArgumentNotValidException ex) { StringBuilder errorMessage = new StringBuilder(); List<FieldError> allErrors = ex.getFieldErrors(); StringJoiner joiner = new StringJoiner(", "); allErrors.forEach(fieldError -> joiner.add(fieldError.getField() + fieldError.getDefaultMessage())); errorMessage.append(joiner); log.error("表单参数异常信息 ex={}", errorMessage); //记录日志 //发送特定消息给运维人员,提醒维护 return ErrorResult.fail(ResultCode.BAD_REQUEST, errorMessage.toString()); }
//其他错误处理 } |
接口返回数据如下: