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); + } }