代码如下:
@ControllerAdvice public class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 处理Controller层通用 BusinessException 异常 * 可以防止Controller未处理异常的程序中止,进行全局捕获 * * @ExceptionHandler(value = Exception.class) 可以定义多个。 */ @ResponseBody @ExceptionHandler(value = Exception.class) public BaseResponse<?> exceptionHandler(Exception e) { String errorInfo = e + IOUtils.LINE_SEPARATOR + String.join(IOUtils.LINE_SEPARATOR, Optional.ofNullable(e.getStackTrace()).map(els -> Arrays.stream(els).map(el -> new StringBuilder().append(" 定位:").append(el.getClassName()).append(".").append(el.getMethodName()).append("(").append(el.getFileName()).append(":").append(el.getLineNumber()).append(")").toString()).collect(Collectors.toList())).orElse(Collections.emptyList())); logger.error("====异常信息:{}", errorInfo); return BaseResponse.errorParameter(errorInfo); } }
执行效果:
控制台打印效果:
前端调用返回效果: