使用spring的注解@ControllerAdvice或@RestControllerAdvice实现全局异常捕捉

    技术2022-07-13  106

    1、@RestControllerAdvice是捕捉带有@RestController注解的所有控制器抛出的异常

    package cn.toroot.bj.core.exception; import cn.toroot.bj.utils.HttpResponseBody; import cn.toroot.bj.core.constant.ResponseCodeConstant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; /** * Mr peng * 2020-6-11 09:20:54 * 描述:全局的异常都会走向这里统一处理! */ @RestControllerAdvice public class ErrorControllerAdvice { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @ExceptionHandler(Exception.class) public Object errorHandle(Exception e){ String errMsg = e.getMessage(); if(e instanceof BusinessException || (e instanceof RuntimeException && (errMsg!=null && errMsg.contains("BusinessException")))){ logger.error(errMsg); String delimiter = BusinessException.RES_CODE_SPLIT_FLAT; errMsg = errMsg.replaceAll(delimiter+delimiter,delimiter); if(errMsg != null && errMsg.contains(delimiter)){ errMsg = errMsg.split(delimiter)[1]; } if(errMsg != null){ errMsg = errMsg.split(BusinessException.class.getPackage().getName())[0].trim(); } }else { errMsg = ResponseCodeConstant.SYS_ERROR; logger.error("", e); } return HttpResponseBody.failResponse(errMsg); } }

    2、@ControllerAdvice指定捕捉:某个控制器或者指定某个包下控制器抛出的异常

    @ControllerAdvice(basePackageClasses = {QualityAuditSummaryController.class}) //指定某一个控制器,可以N个 @ControllerAdvice(basePackages = {"cn.toroot.bj.businessDataSummary.qualityAuditSummary.controller"}) //指定该包下的控制器,可以N个包路径
    Processed: 0.012, SQL: 9