diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolver.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolver.java index e9344b0027d..f1eaa6607da 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolver.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolver.java @@ -61,8 +61,10 @@ public class ServletResponseMethodArgumentResolver implements HandlerMethodArgum MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws IOException { - - mavContainer.setRequestHandled(true); + + if (mavContainer != null) { + mavContainer.setRequestHandled(true); + } HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class); Class paramType = parameter.getParameterType(); diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolverTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolverTests.java index 5ea3c893e63..14c37c7ecd6 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolverTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletResponseMethodArgumentResolverTests.java @@ -70,6 +70,16 @@ public class ServletResponseMethodArgumentResolverTests { assertTrue(mavContainer.isRequestHandled()); } + // SPR-8983 + + public void servletResponseNoMavContainer() throws Exception { + MethodParameter servletResponseParameter = new MethodParameter(method, 0); + assertTrue("ServletResponse not supported", resolver.supportsParameter(servletResponseParameter)); + + Object result = resolver.resolveArgument(servletResponseParameter, null, webRequest, null); + assertSame("Invalid result", servletResponse, result); + } + @Test public void outputStream() throws Exception { MethodParameter outputStreamParameter = new MethodParameter(method, 1);