fix(web): map missing multipart parts to bad request

This commit is contained in:
2026-09-05 10:44:13 +08:00
parent 37183ac2f0
commit 6f2b2babc6
2 changed files with 15 additions and 1 deletions
@@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.resource.NoResourceFoundException; import org.springframework.web.servlet.resource.NoResourceFoundException;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.multipart.MaxUploadSizeExceededException; import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.support.MissingServletRequestPartException;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
@@ -66,7 +67,8 @@ public class GlobalExceptionHandler {
} }
@ExceptionHandler({HttpMessageNotReadableException.class, MissingRequestHeaderException.class, @ExceptionHandler({HttpMessageNotReadableException.class, MissingRequestHeaderException.class,
MissingServletRequestParameterException.class, MethodArgumentTypeMismatchException.class}) MissingServletRequestParameterException.class, MissingServletRequestPartException.class,
MethodArgumentTypeMismatchException.class})
public ResponseEntity<ApiResponse<Void>> handleBadRequest(Exception exception, HttpServletRequest request) { public ResponseEntity<ApiResponse<Void>> handleBadRequest(Exception exception, HttpServletRequest request) {
return failure(ResultCode.BAD_REQUEST, ResultCode.BAD_REQUEST.message(), request); return failure(ResultCode.BAD_REQUEST, ResultCode.BAD_REQUEST.message(), request);
} }
@@ -18,6 +18,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
import org.springframework.dao.CannotAcquireLockException; import org.springframework.dao.CannotAcquireLockException;
import org.springframework.web.multipart.MaxUploadSizeExceededException; import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.support.MissingServletRequestPartException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@@ -65,6 +66,17 @@ class GlobalExceptionHandlerTest {
assertThat(response.getBody().code()).isEqualTo(ResultCode.BAD_REQUEST.code()); 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 @Test
void validationDetailsAreIncludedInMessageAndData() { void validationDetailsAreIncludedInMessageAndData() {
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();