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