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.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<ApiResponse<Void>> handleBadRequest(Exception exception, HttpServletRequest 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.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();