diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java index af629b399d7..2ce20ad0d9b 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; import org.springframework.http.HttpInputMessage; +import org.springframework.http.InvalidMediaTypeException; import org.springframework.http.MediaType; import org.springframework.http.converter.GenericHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; @@ -113,7 +114,14 @@ public abstract class AbstractMessageConverterMethodArgumentResolver implements protected Object readWithMessageConverters(HttpInputMessage inputMessage, MethodParameter methodParam, Type targetType) throws IOException, HttpMediaTypeNotSupportedException { - MediaType contentType = inputMessage.getHeaders().getContentType(); + MediaType contentType; + try { + contentType = inputMessage.getHeaders().getContentType(); + } + catch (InvalidMediaTypeException ex) { + throw new HttpMediaTypeNotSupportedException(ex.getMessage()); + } + if (contentType == null) { contentType = MediaType.APPLICATION_OCTET_STREAM; } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java index 5eb6d49f42c..a4abfb01071 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java @@ -187,6 +187,12 @@ public class RequestResponseBodyMethodProcessorMockTests { } } + @Test(expected = HttpMediaTypeNotSupportedException.class) + public void resolveArgumentInvalidContentType() throws Exception { + this.servletRequest.setContentType("bad"); + processor.resolveArgument(paramRequestBodyString, mavContainer, webRequest, null); + } + @Test public void resolveArgumentNotRequiredNoContent() throws Exception { servletRequest.setContent(null);