From a836f03a5d1fbfa81e147d09ffdfa87ba3975c13 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期二, 18 三月 2025 16:45:02 +0800
Subject: [PATCH] 1

---
 server/web/src/main/java/com/doumee/jtt808/web/controller/ExceptionController.java |  111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 111 insertions(+), 0 deletions(-)

diff --git a/server/web/src/main/java/com/doumee/jtt808/web/controller/ExceptionController.java b/server/web/src/main/java/com/doumee/jtt808/web/controller/ExceptionController.java
new file mode 100644
index 0000000..4d2635b
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/jtt808/web/controller/ExceptionController.java
@@ -0,0 +1,111 @@
+package com.doumee.jtt808.web.controller;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.validation.BindException;
+import org.springframework.validation.FieldError;
+import org.springframework.web.HttpMediaTypeException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
+import org.yzh.commons.model.APICodes;
+import org.yzh.commons.model.APIException;
+import org.yzh.commons.model.APIResult;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@RestControllerAdvice
+public class ExceptionController {
+
+    private static final Logger log = LoggerFactory.getLogger(ExceptionController.class);
+
+    private static final Pattern compile = Pattern.compile("'\\w*'");
+
+//    @ExceptionHandler(Exception.class)
+//    public APIResult<?> onException(Exception e) {
+//        log.error("绯荤粺寮傚父", e);
+//        return new APIResult<>(e);
+//    }
+
+    @ExceptionHandler(APIException.class)
+    public APIResult<?> onAPIException(APIException e) {
+        return new APIResult<>(e);
+    }
+
+    @ExceptionHandler(SQLException.class)
+    public APIResult<?> onSQLException(SQLException e) {
+        String message = e.getMessage();
+        if (message.endsWith("have a default value"))
+            return new APIResult<>(APICodes.MissingParameter, e);
+        log.warn("绯荤粺寮傚父:", e);
+        return new APIResult<>(e);
+    }
+
+    @ExceptionHandler(DuplicateKeyException.class)
+    public APIResult<?> onDuplicateKeyException(DuplicateKeyException e) {
+        Matcher matcher = compile.matcher(e.getCause().getMessage());
+        List<String> values = new ArrayList<>(4);
+        while (matcher.find())
+            values.add(matcher.group());
+
+        int size = values.size();
+        int len = size < 2 ? size : (size / 2);
+
+        StringBuilder sb = new StringBuilder(20);
+        sb.append("宸插瓨鍦ㄧ殑鍙风爜:");
+
+        for (int i = 0; i < len; i++)
+            sb.append(values.get(i)).append(',');
+        return new APIResult<>(APICodes.InvalidParameter, sb.substring(0, sb.length() - 1));
+    }
+
+    @ExceptionHandler(IllegalArgumentException.class)
+    public APIResult<?> onIllegalArgumentException(IllegalArgumentException e) {
+        log.warn("绯荤粺寮傚父:", e);
+        return new APIResult<>(APICodes.InvalidParameter, e.getMessage());
+    }
+
+    @ExceptionHandler(HttpMessageNotReadableException.class)
+    public APIResult<?> onHttpMessageNotReadableException(HttpMessageNotReadableException e) {
+        log.warn("绯荤粺寮傚父:", e);
+        return new APIResult<>(APICodes.TypeMismatch, e);
+    }
+
+    @ExceptionHandler(BindException.class)
+    public APIResult<?> onBindException(BindException e) {
+        List<FieldError> fieldErrors = e.getFieldErrors();
+        StringBuilder sb = new StringBuilder();
+        for (FieldError fieldError : fieldErrors)
+            sb.append(fieldError.getField()).append(fieldError.getDefaultMessage());
+        return new APIResult<>(APICodes.MissingParameter, sb.toString());
+    }
+
+    @ExceptionHandler(HttpMediaTypeException.class)
+    public APIResult<?> onHttpMediaTypeException(HttpMediaTypeException e) {
+        log.warn("绯荤粺寮傚父:", e);
+        return new APIResult<>(APICodes.NotSupportedType, e.getMessage());
+    }
+
+    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
+    public APIResult<?> onHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
+        return new APIResult<>(APICodes.NotImplemented);
+    }
+
+    @ExceptionHandler(MissingServletRequestParameterException.class)
+    public APIResult<?> onMissingServletRequestParameterException(MissingServletRequestParameterException e) {
+        return new APIResult<>(APICodes.MissingParameter, ":" + e.getParameterName());
+    }
+
+    @ExceptionHandler(MethodArgumentTypeMismatchException.class)
+    public APIResult<?> onMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e) {
+        return new APIResult<>(APICodes.TypeMismatch, ":" + e.getName() + "=" + e.getValue(), e.getMessage());
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3