参数校验异常处理

Exisi 2022-12-20 10:16:05
Categories: Tags:
  • Validation 检验框架主要包含两种错误

错误类型

描述

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.PARAMETER_IS_INVALID, 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.PARAMETER_IS_INVALID, errorMessage.toString());

    }

    

    //其他错误处理

}

 

接口返回数据如下:

 

 

来自 <https://juejin.cn/post/7125394085816303646>