ModelAndViewContainer related refinements

This commit is contained in:
Rossen Stoyanchev
2011-04-07 18:09:28 +00:00
parent 3d8b476f58
commit 6fe0ff9e7b
47 changed files with 547 additions and 1073 deletions

View File

@@ -35,8 +35,6 @@ import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.ui.ExtendedModelMap;
import org.springframework.ui.ModelMap;
import org.springframework.util.ClassUtils;
import org.springframework.util.ReflectionUtils.MethodFilter;
import org.springframework.web.bind.annotation.ModelAttribute;
@@ -49,8 +47,7 @@ import org.springframework.web.method.HandlerMethodSelector;
import org.springframework.web.method.annotation.support.ModelAttributeMethodProcessor;
import org.springframework.web.method.support.HandlerMethodArgumentResolverComposite;
import org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.mvc.method.annotation.support.DefaultMethodReturnValueHandler;
/**
@@ -106,10 +103,10 @@ public class ControllerMethodAnnotationDetectionTests {
NativeWebRequest webRequest = new ServletWebRequest(servletRequest, new MockHttpServletResponse());
servletRequest.setParameter("name", "Chad");
ModelMap model = new ExtendedModelMap();
ModelAndView mav = requestMappingMethod.invokeAndHandle(webRequest, model);
ModelAndViewContainer mavContainer = new ModelAndViewContainer();
requestMappingMethod.invokeAndHandle(webRequest, mavContainer);
Object modelAttr = mav.getModelMap().get("attrName");
Object modelAttr = mavContainer.getAttribute("attrName");
assertEquals(TestBean.class, modelAttr.getClass());
assertEquals("Chad", ((TestBean) modelAttr).getName());

View File

@@ -28,6 +28,7 @@ import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.mvc.method.annotation.support.DefaultMethodReturnValueHandler;
/**
@@ -56,7 +57,7 @@ public class ServletInvocableHandlerMethodTests {
ServletInvocableHandlerMethod handlerMethod = new ServletInvocableHandlerMethod(new Handler(), method);
handlerMethod.setHandlerMethodReturnValueHandlers(handlers);
handlerMethod.invokeAndHandle(webRequest, null);
handlerMethod.invokeAndHandle(webRequest, new ModelAndViewContainer());
assertEquals(HttpStatus.BAD_REQUEST.value(), response.getStatus());
assertEquals("400 Bad Request", response.getErrorMessage());

View File

@@ -46,6 +46,7 @@ import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.HttpMediaTypeNotAcceptableException;
import org.springframework.web.HttpMediaTypeNotSupportedException;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.mvc.method.annotation.support.HttpEntityMethodProcessor;
/**
@@ -65,16 +66,18 @@ public class HttpEntityMethodProcessorTests {
private MethodParameter intReturnValue;
private MethodParameter httpEntityReturnValue;
private MethodParameter intParameter;
private ModelAndViewContainer mavContainer;
private ServletWebRequest request;
private MockHttpServletRequest servletRequest;
private MockHttpServletResponse servletResponse;
private MethodParameter httpEntityReturnValue;
private MethodParameter intParameter;
@SuppressWarnings("unchecked")
@Before
public void setUp() throws Exception {
@@ -93,6 +96,8 @@ public class HttpEntityMethodProcessorTests {
Method other = getClass().getMethod("otherMethod");
intReturnValue = new MethodParameter(other, -1);
mavContainer = new ModelAndViewContainer();
servletRequest = new MockHttpServletRequest();
servletResponse = new MockHttpServletResponse();
request = new ServletWebRequest(servletRequest, servletResponse);
@@ -135,7 +140,7 @@ public class HttpEntityMethodProcessorTests {
replay(messageConverter);
HttpEntity<?> result = (HttpEntity<String>) processor.resolveArgument(httpEntityParam, null, request, null);
HttpEntity<?> result = (HttpEntity<String>) processor.resolveArgument(httpEntityParam, mavContainer, request, null);
assertEquals("Invalid argument", expected, result.getBody());
verify(messageConverter);
@@ -152,14 +157,14 @@ public class HttpEntityMethodProcessorTests {
replay(messageConverter);
processor.resolveArgument(httpEntityParam, null, request, null);
processor.resolveArgument(httpEntityParam, mavContainer, request, null);
verify(messageConverter);
}
@Test(expected = HttpMediaTypeNotSupportedException.class)
public void resolveArgumentNoContentType() throws Exception {
processor.resolveArgument(httpEntityParam, null, request, null);
processor.resolveArgument(httpEntityParam, mavContainer, request, null);
}
@Test
@@ -175,8 +180,9 @@ public class HttpEntityMethodProcessorTests {
replay(messageConverter);
processor.handleReturnValue(returnValue, responseEntityReturnValue, null, request);
processor.handleReturnValue(returnValue, responseEntityReturnValue, mavContainer, request);
assertFalse(mavContainer.isResolveView());
verify(messageConverter);
}
@@ -193,8 +199,9 @@ public class HttpEntityMethodProcessorTests {
replay(messageConverter);
processor.handleReturnValue(returnValue, responseEntityReturnValue, null, request);
processor.handleReturnValue(returnValue, responseEntityReturnValue, mavContainer, request);
assertFalse(mavContainer.isResolveView());
verify(messageConverter);
}
@@ -205,8 +212,9 @@ public class HttpEntityMethodProcessorTests {
ResponseEntity<String> returnValue = new ResponseEntity<String>(responseHeaders, HttpStatus.ACCEPTED);
HttpEntityMethodProcessor processor = new HttpEntityMethodProcessor(new StringHttpMessageConverter());
processor.handleReturnValue(returnValue, responseEntityReturnValue, null, request);
processor.handleReturnValue(returnValue, responseEntityReturnValue, mavContainer, request);
assertFalse(mavContainer.isResolveView());
assertEquals("headerValue", servletResponse.getHeader("header"));
}
@@ -217,8 +225,9 @@ public class HttpEntityMethodProcessorTests {
ResponseEntity<String> returnValue = new ResponseEntity<String>("body", responseHeaders, HttpStatus.ACCEPTED);
HttpEntityMethodProcessor processor = new HttpEntityMethodProcessor(new StringHttpMessageConverter());
processor.handleReturnValue(returnValue, responseEntityReturnValue, null, request);
processor.handleReturnValue(returnValue, responseEntityReturnValue, mavContainer, request);
assertFalse(mavContainer.isResolveView());
assertEquals("headerValue", servletResponse.getHeader("header"));
}

View File

@@ -44,6 +44,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.mvc.method.annotation.support.RequestResponseBodyMethodProcessor;
/**
@@ -63,6 +64,8 @@ public class RequestResponseBodyMethodProcessorTests {
private MethodParameter intReturnValue;
private ModelAndViewContainer mavContainer;
private NativeWebRequest webRequest;
private MockHttpServletRequest servletRequest;
@@ -79,6 +82,8 @@ public class RequestResponseBodyMethodProcessorTests {
Method other = getClass().getMethod("otherMethod");
intReturnValue = new MethodParameter(other, -1);
mavContainer = new ModelAndViewContainer();
servletRequest = new MockHttpServletRequest();
MockHttpServletResponse servletResponse = new MockHttpServletResponse();
webRequest = new ServletWebRequest(servletRequest, servletResponse);
@@ -116,7 +121,7 @@ public class RequestResponseBodyMethodProcessorTests {
replay(messageConverter);
Object result = processor.resolveArgument(stringParameter, null, webRequest, null);
Object result = processor.resolveArgument(stringParameter, mavContainer, webRequest, null);
assertEquals("Invalid argument", expected, result);
verify(messageConverter);
@@ -134,14 +139,14 @@ public class RequestResponseBodyMethodProcessorTests {
replay(messageConverter);
processor.resolveArgument(stringParameter, null, webRequest, null);
processor.resolveArgument(stringParameter, mavContainer, webRequest, null);
verify(messageConverter);
}
@Test(expected = HttpMediaTypeNotSupportedException.class)
public void resolveArgumentNoContentType() throws Exception {
processor.resolveArgument(stringParameter, null, webRequest, null);
processor.resolveArgument(stringParameter, mavContainer, webRequest, null);
}
@Test
@@ -156,8 +161,9 @@ public class RequestResponseBodyMethodProcessorTests {
replay(messageConverter);
processor.handleReturnValue(returnValue, stringReturnValue, null, webRequest);
processor.handleReturnValue(returnValue, stringReturnValue, mavContainer, webRequest);
assertFalse(mavContainer.isResolveView());
verify(messageConverter);
}
@@ -173,8 +179,9 @@ public class RequestResponseBodyMethodProcessorTests {
replay(messageConverter);
processor.handleReturnValue(returnValue, stringReturnValue, null, webRequest);
processor.handleReturnValue(returnValue, stringReturnValue, mavContainer, webRequest);
assertFalse(mavContainer.isResolveView());
verify(messageConverter);
}

View File

@@ -28,6 +28,7 @@ import org.springframework.core.MethodParameter;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.mvc.method.annotation.support.ServletResponseMethodArgumentResolver;
import static org.junit.Assert.*;
@@ -45,12 +46,14 @@ public class ServletResponseMethodArgumentResolverTests {
private MockHttpServletResponse servletResponse;
private ModelAndViewContainer mavContainer;
@Before
public void setUp() throws Exception {
resolver = new ServletResponseMethodArgumentResolver();
supportedParams =
getClass().getMethod("supportedParams", ServletResponse.class, OutputStream.class, Writer.class);
supportedParams = getClass().getMethod("supportedParams", ServletResponse.class, OutputStream.class, Writer.class);
servletResponse = new MockHttpServletResponse();
mavContainer = new ModelAndViewContainer();
webRequest = new ServletWebRequest(new MockHttpServletRequest(), servletResponse);
}
@@ -65,8 +68,9 @@ public class ServletResponseMethodArgumentResolverTests {
assertTrue("ServletResponse not supported", resolver.supportsParameter(servletResponseParameter));
Object result = resolver.resolveArgument(servletResponseParameter, null, webRequest, null);
Object result = resolver.resolveArgument(servletResponseParameter, mavContainer, webRequest, null);
assertSame("Invalid result", servletResponse, result);
assertFalse(mavContainer.isResolveView());
}
@Test
@@ -75,8 +79,9 @@ public class ServletResponseMethodArgumentResolverTests {
assertTrue("OutputStream not supported", resolver.supportsParameter(outputStreamParameter));
Object result = resolver.resolveArgument(outputStreamParameter, null, webRequest, null);
Object result = resolver.resolveArgument(outputStreamParameter, mavContainer, webRequest, null);
assertSame("Invalid result", servletResponse.getOutputStream(), result);
assertFalse(mavContainer.isResolveView());
}
@Test
@@ -85,8 +90,9 @@ public class ServletResponseMethodArgumentResolverTests {
assertTrue("Writer not supported", resolver.supportsParameter(writerParameter));
Object result = resolver.resolveArgument(writerParameter, null, webRequest, null);
Object result = resolver.resolveArgument(writerParameter, mavContainer, webRequest, null);
assertSame("Invalid result", servletResponse.getWriter(), result);
assertFalse(mavContainer.isResolveView());
}
public void supportedParams(ServletResponse p0, OutputStream p1, Writer p2) {