From 088e1ba6624c7523ee2566110b2c4721a37204a5 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 09 四月 2026 14:22:09 +0800
Subject: [PATCH] #生成波次
---
rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java | 83 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 82 insertions(+), 1 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
index 1c1bbc5..ea691e6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
@@ -6,13 +6,17 @@
import com.vincent.rsf.server.common.utils.CommonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.dao.DuplicateKeyException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.context.request.async.AsyncRequestNotUsableException;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* 鍏ㄥ眬寮傚父澶勭悊鍣�
@@ -54,13 +58,90 @@
return R.error(e.getMessage());
}
+ @ResponseBody
+ @ExceptionHandler(DuplicateKeyException.class)
+ public R duplicateKeyExceptionHandler(DuplicateKeyException e, HttpServletResponse response) {
+ CommonUtil.addCrossHeaders(response);
+ String msg = e.getMessage();
+ String out = "鍞竴绱㈠紩鍐茬獊";
+ try {
+ Pattern p = Pattern.compile("Duplicate entry '(.+?)' for key '(.+?)'");
+ Matcher m = p.matcher(msg);
+ if (m.find()) {
+ String value = m.group(1);
+ String key = m.group(2);
+ if ("idx_code".equalsIgnoreCase(key)) {
+ out = "缂栫爜宸插瓨鍦細" + value;
+ } else {
+ out = "鍞竴绱㈠紩[" + key + "]鍊煎凡瀛樺湪锛�" + value;
+ }
+ }
+ } catch (Exception ignore) {}
+ return R.error(out);
+ }
+
+ @ExceptionHandler(AsyncRequestNotUsableException.class)
+ public void asyncRequestNotUsableExceptionHandler(AsyncRequestNotUsableException e) {
+ logger.warn("Client connection aborted: {}", resolveAbortMessage(e));
+ }
+
+ @ResponseBody
+ @ExceptionHandler(RuntimeException.class)
+ public R runtimeExceptionHandler(RuntimeException e, HttpServletResponse response) {
+ if (isClientAbortException(e)) {
+ logger.warn("Client connection aborted: {}", resolveAbortMessage(e));
+ return null;
+ }
+ CommonUtil.addCrossHeaders(response);
+ Throwable cause = e.getCause();
+ if (cause instanceof CoolException) {
+ return R.error(cause.getMessage());
+ }
+ logger.error(e.getMessage(), e);
+ return R.error(Constants.RESULT_ERROR_MSG);
+ }
@ResponseBody
@ExceptionHandler(Throwable.class)
public R exceptionHandler(Throwable e, HttpServletResponse response) {
+ if (isClientAbortException(e)) {
+ logger.warn("Client connection aborted: {}", resolveAbortMessage(e));
+ return null;
+ }
logger.error(e.getMessage(), e);
CommonUtil.addCrossHeaders(response);
return R.error(Constants.RESULT_ERROR_MSG);
}
+ private boolean isClientAbortException(Throwable throwable) {
+ Throwable current = throwable;
+ while (current != null) {
+ String message = current.getMessage();
+ if (message != null) {
+ String normalized = message.toLowerCase();
+ if (normalized.contains("broken pipe")
+ || normalized.contains("connection reset")
+ || normalized.contains("forcibly closed")
+ || normalized.contains("abort")) {
+ return true;
+ }
+ }
+ current = current.getCause();
+ }
+ return false;
+ }
+
+ private String resolveAbortMessage(Throwable throwable) {
+ Throwable current = throwable;
+ while (current != null) {
+ String message = current.getMessage();
+ if (message != null && !message.isBlank()) {
+ return message;
+ }
+ current = current.getCause();
+ }
+ return "client aborted connection";
+ }
+
}
+
--
Gitblit v1.9.1