diff --git a/yudao-framework/yudao-spring-boot-starter-web/pom.xml b/yudao-framework/yudao-spring-boot-starter-web/pom.xml
index d04db57c47..92ebc918f0 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/pom.xml
+++ b/yudao-framework/yudao-spring-boot-starter-web/pom.xml
@@ -53,7 +53,13 @@
provided
-
+
+
+ com.google.guava
+ guava
+ provided
+
+
org.jsoup
jsoup
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
index 627a5ea784..9f2d6bd087 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
@@ -5,7 +5,6 @@ import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.servlet.JakartaServletUtil;
import cn.iocoder.yudao.framework.common.biz.infra.logger.ApiErrorLogCommonApi;
import cn.iocoder.yudao.framework.common.biz.infra.logger.dto.ApiErrorLogCreateReqDTO;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
@@ -23,6 +22,7 @@ import jakarta.validation.ConstraintViolationException;
import jakarta.validation.ValidationException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.concurrent.UncheckedExecutionException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.util.Assert;
@@ -111,6 +111,9 @@ public class GlobalExceptionHandler {
if (ex instanceof AccessDeniedException) {
return accessDeniedExceptionHandler(request, (AccessDeniedException) ex);
}
+ if (ex instanceof UncheckedExecutionException && ex.getCause() != ex) {
+ return allExceptionHandler(request, ex.getCause());
+ }
return defaultExceptionHandler(request, ex);
}
@@ -266,6 +269,16 @@ public class GlobalExceptionHandler {
return CommonResult.error(FORBIDDEN);
}
+ /**
+ * 处理 Guava UncheckedExecutionException
+ *
+ * 例如说,缓存加载报错,可见 https://t.zsxq.com/UszdH
+ */
+ @ExceptionHandler(value = UncheckedExecutionException.class)
+ public CommonResult> uncheckedExecutionExceptionHandler(HttpServletRequest req, UncheckedExecutionException ex) {
+ return allExceptionHandler(req, ex.getCause());
+ }
+
/**
* 处理业务异常 ServiceException
*
@@ -344,12 +357,12 @@ public class GlobalExceptionHandler {
errorLog.setApplicationName(applicationName);
errorLog.setRequestUrl(request.getRequestURI());
Map requestParams = MapUtil.builder()
- .put("query", JakartaServletUtil.getParamMap(request))
- .put("body", JakartaServletUtil.getBody(request)).build();
+ .put("query", ServletUtils.getParamMap(request))
+ .put("body", ServletUtils.getBody(request)).build();
errorLog.setRequestParams(JsonUtils.toJsonString(requestParams));
errorLog.setRequestMethod(request.getMethod());
errorLog.setUserAgent(ServletUtils.getUserAgent(request));
- errorLog.setUserIp(JakartaServletUtil.getClientIP(request));
+ errorLog.setUserIp(ServletUtils.getClientIP(request));
errorLog.setExceptionTime(LocalDateTime.now());
}