/** * Set {@link ModelAndViewContainer#setRequestHandled(boolean)} to * {@code false} to indicate that the method signature provides access * to the response. If subsequently the underlying method returns * {@code null}, the request is considered directly handled. */ @Override public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { if (mavContainer != null) { mavContainer.setRequestHandled(true); } Class<?> paramType = parameter.getParameterType(); // ServletResponse, HttpServletResponse if (ServletResponse.class.isAssignableFrom(paramType)) { return resolveNativeResponse(webRequest, paramType); } // ServletResponse required for all further argument types return resolveArgument(paramType, resolveNativeResponse(webRequest, ServletResponse.class)); }
/** * Set {@link ModelAndViewContainer#setRequestHandled(boolean)} to * {@code false} to indicate that the method signature provides access * to the response. If subsequently the underlying method returns * {@code null}, the request is considered directly handled. */ @Override public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { if (mavContainer != null) { mavContainer.setRequestHandled(true); } Class<?> paramType = parameter.getParameterType(); // ServletResponse, HttpServletResponse if (ServletResponse.class.isAssignableFrom(paramType)) { return resolveNativeResponse(webRequest, paramType); } // ServletResponse required for all further argument types return resolveArgument(paramType, resolveNativeResponse(webRequest, ServletResponse.class)); }
@Test // 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 servletResponse() throws Exception { MethodParameter servletResponseParameter = new MethodParameter(method, 0); assertTrue("ServletResponse not supported", resolver.supportsParameter(servletResponseParameter)); Object result = resolver.resolveArgument(servletResponseParameter, mavContainer, webRequest, null); assertSame("Invalid result", servletResponse, result); assertTrue(mavContainer.isRequestHandled()); }
@Test public void outputStream() throws Exception { MethodParameter outputStreamParameter = new MethodParameter(method, 1); assertTrue("OutputStream not supported", resolver.supportsParameter(outputStreamParameter)); Object result = resolver.resolveArgument(outputStreamParameter, mavContainer, webRequest, null); assertSame("Invalid result", servletResponse.getOutputStream(), result); assertTrue(mavContainer.isRequestHandled()); }
@Test public void writer() throws Exception { MethodParameter writerParameter = new MethodParameter(method, 2); assertTrue("Writer not supported", resolver.supportsParameter(writerParameter)); Object result = resolver.resolveArgument(writerParameter, mavContainer, webRequest, null); assertSame("Invalid result", servletResponse.getWriter(), result); assertTrue(mavContainer.isRequestHandled()); }