From 68c3238b96764fdb2efd8851b8c2a97e1c47b68d Mon Sep 17 00:00:00 2001 From: Russell Bolles Date: Thu, 13 Mar 2025 12:22:25 -0700 Subject: [PATCH] FormHttpMessageConverter should throw HttpMessageNotReadableException instead of IllegalArgumentException when the http form data is invalid HttpMessageNotReadableException is a more specific exception that will allow users to better target and react to invalid request payloads Signed-off-by: Russell Bolles --- .../converter/FormHttpMessageConverter.java | 18 +++++++--- .../FormHttpMessageConverterTests.java | 33 +++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java index c3cad8ac5624..eb615ea422ed 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java @@ -353,12 +353,22 @@ public MultiValueMap read(@Nullable Class body = new LinkedMultiValueMap<>(); @@ -410,6 +432,17 @@ private void assertCannotWrite(MediaType mediaType) { assertThat(this.converter.canWrite(clazz, mediaType)).as(clazz.getSimpleName() + " : " + mediaType).isFalse(); } + private void assertInvalidFormIsRejectedWithSpecificException(String body) { + MockHttpInputMessage inputMessage = new MockHttpInputMessage(body.getBytes(StandardCharsets.ISO_8859_1)); + inputMessage.getHeaders().setContentType( + new MediaType("application", "x-www-form-urlencoded", StandardCharsets.ISO_8859_1)); + + assertThatThrownBy(() -> this.converter.read(null, inputMessage)) + .isInstanceOf(HttpMessageNotReadableException.class) + .hasCauseInstanceOf(IllegalArgumentException.class) + .hasMessage("Could not decode HTTP form payload"); + } + private static class MockHttpOutputMessageRequestContext implements UploadContext {