From 6f2b2babc69f792a47189b31671883e417eeb7af Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sat, 5 Sep 2026 10:44:13 +0800 Subject: [PATCH] fix(web): map missing multipart parts to bad request --- .../baiyue/common/web/GlobalExceptionHandler.java | 4 +++- .../common/web/GlobalExceptionHandlerTest.java | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/common-web/src/main/java/com/baiyue/common/web/GlobalExceptionHandler.java b/common-web/src/main/java/com/baiyue/common/web/GlobalExceptionHandler.java index da926f706..01958f455 100644 --- a/common-web/src/main/java/com/baiyue/common/web/GlobalExceptionHandler.java +++ b/common-web/src/main/java/com/baiyue/common/web/GlobalExceptionHandler.java @@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.resource.NoResourceFoundException; import org.springframework.web.server.ResponseStatusException; import org.springframework.web.multipart.MaxUploadSizeExceededException; +import org.springframework.web.multipart.support.MissingServletRequestPartException; import java.util.LinkedHashMap; import java.util.Map; @@ -66,7 +67,8 @@ public class GlobalExceptionHandler { } @ExceptionHandler({HttpMessageNotReadableException.class, MissingRequestHeaderException.class, - MissingServletRequestParameterException.class, MethodArgumentTypeMismatchException.class}) + MissingServletRequestParameterException.class, MissingServletRequestPartException.class, + MethodArgumentTypeMismatchException.class}) public ResponseEntity> handleBadRequest(Exception exception, HttpServletRequest request) { return failure(ResultCode.BAD_REQUEST, ResultCode.BAD_REQUEST.message(), request); } diff --git a/common-web/src/test/java/com/baiyue/common/web/GlobalExceptionHandlerTest.java b/common-web/src/test/java/com/baiyue/common/web/GlobalExceptionHandlerTest.java index d70a952ba..c1283467e 100644 --- a/common-web/src/test/java/com/baiyue/common/web/GlobalExceptionHandlerTest.java +++ b/common-web/src/test/java/com/baiyue/common/web/GlobalExceptionHandlerTest.java @@ -18,6 +18,7 @@ import org.springframework.http.HttpStatus; import org.springframework.web.server.ResponseStatusException; import org.springframework.dao.CannotAcquireLockException; import org.springframework.web.multipart.MaxUploadSizeExceededException; +import org.springframework.web.multipart.support.MissingServletRequestPartException; import java.lang.reflect.Method; @@ -65,6 +66,17 @@ class GlobalExceptionHandlerTest { assertThat(response.getBody().code()).isEqualTo(ResultCode.BAD_REQUEST.code()); } + @Test + void missingRequiredMultipartPartMapsToBadRequest() { + MockHttpServletRequest request = new MockHttpServletRequest(); + + var response = handler.handleBadRequest( + new MissingServletRequestPartException("file"), request); + + assertThat(response.getStatusCode().value()).isEqualTo(200); + assertThat(response.getBody().code()).isEqualTo(ResultCode.BAD_REQUEST.code()); + } + @Test void validationDetailsAreIncludedInMessageAndData() { MockHttpServletRequest request = new MockHttpServletRequest();