From 3d4bec6e963eadb1c6e1ef5efa19fb1b60ed4bd8 Mon Sep 17 00:00:00 2001
From: zkh <1650697374@qq.com>
Date: Sat, 17 Jan 2026 12:17:55 +0800
Subject: [PATCH] =?UTF-8?q?feat(web):=20=E6=B7=BB=E5=8A=A0=E5=85=A8?=
=?UTF-8?q?=E5=B1=80=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=99=A8=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E8=AF=B7=E6=B1=82=E5=8F=82=E6=95=B0=E9=AA=8C=E8=AF=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 MethodArgumentNotValidException 处理器,用于处理 @RequestBody + @Valid 校验失败
- 新增 ConstraintViolationException 处理器,用于处理 @RequestParam/@PathVariable 校验失败
- 实现了统一的参数验证错误响应格式
- 添加了详细的字段错误信息提取和返回机制
- 集成了日志记录功能以跟踪验证失败情况
- 更新了项目版本从 1.5.6 到 1.5.7
---
pom.xml | 2 +-
zkh-common/pom.xml | 2 +-
zkh-data/pom.xml | 2 +-
zkh-file/pom.xml | 2 +-
zkh-log/pom.xml | 2 +-
zkh-web/pom.xml | 2 +-
.../web/config/GlobalExceptionHandler.java | 39 +++++++++++++++++++
7 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/pom.xml b/pom.xml
index cd8df1d..f43e3f3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.6
+ 1.5.7
pom
ZKH Framework
A Java framework for ZKH applications
diff --git a/zkh-common/pom.xml b/zkh-common/pom.xml
index 3d78449..e2695bf 100644
--- a/zkh-common/pom.xml
+++ b/zkh-common/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.6
+ 1.5.7
zkh-common
diff --git a/zkh-data/pom.xml b/zkh-data/pom.xml
index 78cc252..8dd4ef3 100644
--- a/zkh-data/pom.xml
+++ b/zkh-data/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.6
+ 1.5.7
zkh-data
diff --git a/zkh-file/pom.xml b/zkh-file/pom.xml
index 67ee0b8..764ba44 100644
--- a/zkh-file/pom.xml
+++ b/zkh-file/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.6
+ 1.5.7
zkh-file
diff --git a/zkh-log/pom.xml b/zkh-log/pom.xml
index 2c027e3..ae15e10 100644
--- a/zkh-log/pom.xml
+++ b/zkh-log/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.6
+ 1.5.7
zkh-log
diff --git a/zkh-web/pom.xml b/zkh-web/pom.xml
index 30f4d19..162117f 100644
--- a/zkh-web/pom.xml
+++ b/zkh-web/pom.xml
@@ -7,7 +7,7 @@
vip.jcfd
zkh-framework
- 1.5.6
+ 1.5.7
zkh-web
diff --git a/zkh-web/src/main/java/vip/jcfd/web/config/GlobalExceptionHandler.java b/zkh-web/src/main/java/vip/jcfd/web/config/GlobalExceptionHandler.java
index b969493..957d992 100644
--- a/zkh-web/src/main/java/vip/jcfd/web/config/GlobalExceptionHandler.java
+++ b/zkh-web/src/main/java/vip/jcfd/web/config/GlobalExceptionHandler.java
@@ -1,11 +1,16 @@
package vip.jcfd.web.config;
+import jakarta.validation.ConstraintViolationException;
import jakarta.validation.ValidationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
+import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.resource.NoResourceFoundException;
import vip.jcfd.common.core.BizException;
@@ -54,4 +59,38 @@ public class GlobalExceptionHandler {
log.error("接口入参校验失败", e);
return R.error(e.getMessage());
}
+
+ /**
+ * 处理 @RequestBody + @Valid 校验失败
+ */
+ @ExceptionHandler(MethodArgumentNotValidException.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ public R> handleMethodArgumentNotValid(MethodArgumentNotValidException ex) {
+ log.error("接口入参校验失败", ex);
+ BindingResult bindingResult = ex.getBindingResult();
+
+ String msg = bindingResult.getFieldErrors()
+ .stream()
+ .map(err -> err.getField() + ": " + err.getDefaultMessage())
+ .findFirst()
+ .orElse("参数错误");
+
+ return R.error(msg);
+ }
+
+ /**
+ * 处理 @RequestParam / @PathVariable 校验失败
+ */
+ @ExceptionHandler(ConstraintViolationException.class)
+ @ResponseStatus(HttpStatus.BAD_REQUEST)
+ public R> handleConstraintViolation(ConstraintViolationException ex) {
+ log.error("接口入参校验失败", ex);
+ String msg = ex.getConstraintViolations()
+ .stream()
+ .map(v -> v.getPropertyPath() + ": " + v.getMessage())
+ .findFirst()
+ .orElse("参数错误");
+
+ return R.error(msg);
+ }
}