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;
@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})
@ControllerAdvice(basePackages = {"cn.toroot.bj.businessDataSummary.qualityAuditSummary.controller"})