springmvc全局异常处理

@ControllerAdvice + @ExceptionHandler 进行
全局的 Controller 层异常处理,
不用在 Controller 层进行 try-catch 了

优点:

将 Controller 层的异常和数据校验的异常进行统一处理,减少模板代码,减少编码量,提升扩展性和可维护性。

@ControllerAdvice
public class GlobalExceptionHandler {

    private static Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);


    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResultModle exceptionCatch(Exception ex) {


        if (ex instanceof MissingServletRequestParameterException) {

            MissingServletRequestParameterException missingServletRequestParameterException =
                    (MissingServletRequestParameterException) ex;

            String parameterName = missingServletRequestParameterException.getParameterName();
            return new ResultModle(ErrorConstants.INVALID_PARAM_CODE, ErrorConstants.INVALID_PARAM_MSG + " >> " + parameterName);


        } else if (ex instanceof HttpRequestMethodNotSupportedException) {

            HttpRequestMethodNotSupportedException methodNotSupportedException =
                    (HttpRequestMethodNotSupportedException) ex;

            return new ResultModle(ErrorConstants.COMMON_ERROR_CODE, ex.getMessage());
        } else {

            logger.error("服务器报错 >> {}", ExceptionUtils.getStackTrace(ex));
            return ResultModle.serverError();
        }
    }


    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    public ResultModle handleBusinessException(BusinessException ex) {

        logger.error("业务层异常 >> {}", ExceptionUtils.getStackTrace(ex));

        return ResultModle.commonError(ex.getMessage());

    }


    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public ResultModle handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) {

        logger.error("数据验证异常 >> {}", ExceptionUtils.getStackTrace(ex));

        return ResultModle.commonError(ex.getBindingResult().getAllErrors().get(0).getDefaultMessage());

    }

 

@ExceptionHandler(BusinessException.class) 声明了对 BusinessException 业务异常的处理,并获取该业务异常中的错误提示,构造后返回给客户端。

@ExceptionHandler(Exception.class) 声明了对 Exception 异常的处理,起到兜底作用,不管 Controller 层执行的代码出现了什么未能考虑到的异常,都返回统一的错误提示给客户端。

发表评论

邮箱地址不会被公开。