Fix issues encountered in Greenhouse
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4208 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
parent
ab2083d4b8
commit
238a2bc815
|
|
@ -79,10 +79,12 @@ public class DefaultMethodReturnValueHandler implements HandlerMethodReturnValue
|
||||||
else if (!BeanUtils.isSimpleProperty(returnValue.getClass())) {
|
else if (!BeanUtils.isSimpleProperty(returnValue.getClass())) {
|
||||||
String name = ModelFactory.getNameForReturnValue(returnValue, returnType);
|
String name = ModelFactory.getNameForReturnValue(returnValue, returnType);
|
||||||
mavContainer.addAttribute(name, returnValue);
|
mavContainer.addAttribute(name, returnValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// should not happen
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
// should not happen
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import javax.servlet.http.HttpSession;
|
||||||
import org.springframework.core.MethodParameter;
|
import org.springframework.core.MethodParameter;
|
||||||
import org.springframework.web.bind.support.WebDataBinderFactory;
|
import org.springframework.web.bind.support.WebDataBinderFactory;
|
||||||
import org.springframework.web.context.request.NativeWebRequest;
|
import org.springframework.web.context.request.NativeWebRequest;
|
||||||
|
import org.springframework.web.context.request.WebRequest;
|
||||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||||
import org.springframework.web.method.support.ModelAndViewContainer;
|
import org.springframework.web.method.support.ModelAndViewContainer;
|
||||||
import org.springframework.web.multipart.MultipartRequest;
|
import org.springframework.web.multipart.MultipartRequest;
|
||||||
|
|
@ -43,7 +44,8 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
|
|
||||||
public boolean supportsParameter(MethodParameter parameter) {
|
public boolean supportsParameter(MethodParameter parameter) {
|
||||||
Class<?> parameterType = parameter.getParameterType();
|
Class<?> parameterType = parameter.getParameterType();
|
||||||
return ServletRequest.class.isAssignableFrom(parameterType) ||
|
return WebRequest.class.isAssignableFrom(parameterType) ||
|
||||||
|
ServletRequest.class.isAssignableFrom(parameterType) ||
|
||||||
MultipartRequest.class.isAssignableFrom(parameterType) ||
|
MultipartRequest.class.isAssignableFrom(parameterType) ||
|
||||||
HttpSession.class.isAssignableFrom(parameterType) || Principal.class.isAssignableFrom(parameterType) ||
|
HttpSession.class.isAssignableFrom(parameterType) || Principal.class.isAssignableFrom(parameterType) ||
|
||||||
Locale.class.equals(parameterType) || InputStream.class.isAssignableFrom(parameterType) ||
|
Locale.class.equals(parameterType) || InputStream.class.isAssignableFrom(parameterType) ||
|
||||||
|
|
@ -61,6 +63,9 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
|
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
|
||||||
Class<?> parameterType = parameter.getParameterType();
|
Class<?> parameterType = parameter.getParameterType();
|
||||||
|
|
||||||
|
if (WebRequest.class.isAssignableFrom(parameterType)) {
|
||||||
|
return webRequest;
|
||||||
|
}
|
||||||
if (ServletRequest.class.isAssignableFrom(parameterType) ||
|
if (ServletRequest.class.isAssignableFrom(parameterType) ||
|
||||||
MultipartRequest.class.isAssignableFrom(parameterType)) {
|
MultipartRequest.class.isAssignableFrom(parameterType)) {
|
||||||
Object nativeRequest = webRequest.getNativeRequest(parameterType);
|
Object nativeRequest = webRequest.getNativeRequest(parameterType);
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.springframework.beans.TestBean;
|
||||||
import org.springframework.core.MethodParameter;
|
import org.springframework.core.MethodParameter;
|
||||||
import org.springframework.mock.web.MockHttpServletRequest;
|
import org.springframework.mock.web.MockHttpServletRequest;
|
||||||
import org.springframework.ui.ExtendedModelMap;
|
import org.springframework.ui.ExtendedModelMap;
|
||||||
|
|
@ -62,6 +63,12 @@ public class DefaultMethodReturnValueHandlerTests {
|
||||||
assertTrue(mavContainer.getModel().isEmpty());
|
assertTrue(mavContainer.getModel().isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void returnSingleModelAttribute() throws Exception{
|
||||||
|
handler.handleReturnValue(new TestBean(), createMethodParam("singleModelAttribute"), mavContainer, webRequest);
|
||||||
|
assertTrue(mavContainer.containsAttribute("testBean"));
|
||||||
|
}
|
||||||
|
|
||||||
private MethodParameter createMethodParam(String methodName) throws Exception {
|
private MethodParameter createMethodParam(String methodName) throws Exception {
|
||||||
Method method = getClass().getDeclaredMethod(methodName);
|
Method method = getClass().getDeclaredMethod(methodName);
|
||||||
return new MethodParameter(method, -1);
|
return new MethodParameter(method, -1);
|
||||||
|
|
@ -76,4 +83,9 @@ public class DefaultMethodReturnValueHandlerTests {
|
||||||
private void voidReturnValue() {
|
private void voidReturnValue() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private TestBean singleModelAttribute() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ import org.springframework.mock.web.MockHttpServletRequest;
|
||||||
import org.springframework.mock.web.MockHttpServletResponse;
|
import org.springframework.mock.web.MockHttpServletResponse;
|
||||||
import org.springframework.mock.web.MockHttpSession;
|
import org.springframework.mock.web.MockHttpSession;
|
||||||
import org.springframework.web.context.request.ServletWebRequest;
|
import org.springframework.web.context.request.ServletWebRequest;
|
||||||
|
import org.springframework.web.context.request.WebRequest;
|
||||||
import org.springframework.web.multipart.MultipartRequest;
|
import org.springframework.web.multipart.MultipartRequest;
|
||||||
import org.springframework.web.servlet.mvc.method.annotation.support.ServletRequestMethodArgumentResolver;
|
import org.springframework.web.servlet.mvc.method.annotation.support.ServletRequestMethodArgumentResolver;
|
||||||
|
|
||||||
|
|
@ -55,7 +56,7 @@ public class ServletRequestMethodArgumentResolverTests {
|
||||||
resolver = new ServletRequestMethodArgumentResolver();
|
resolver = new ServletRequestMethodArgumentResolver();
|
||||||
supportedParams = getClass()
|
supportedParams = getClass()
|
||||||
.getMethod("supportedParams", ServletRequest.class, MultipartRequest.class, HttpSession.class,
|
.getMethod("supportedParams", ServletRequest.class, MultipartRequest.class, HttpSession.class,
|
||||||
Principal.class, Locale.class, InputStream.class, Reader.class);
|
Principal.class, Locale.class, InputStream.class, Reader.class, WebRequest.class);
|
||||||
servletRequest = new MockHttpServletRequest();
|
servletRequest = new MockHttpServletRequest();
|
||||||
webRequest = new ServletWebRequest(servletRequest, new MockHttpServletResponse());
|
webRequest = new ServletWebRequest(servletRequest, new MockHttpServletResponse());
|
||||||
}
|
}
|
||||||
|
|
@ -135,13 +136,24 @@ public class ServletRequestMethodArgumentResolverTests {
|
||||||
assertSame("Invalid result", webRequest.getRequest().getReader(), result);
|
assertSame("Invalid result", webRequest.getRequest().getReader(), result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void webRequest() throws Exception {
|
||||||
|
MethodParameter webRequestParameter = new MethodParameter(supportedParams, 7);
|
||||||
|
|
||||||
|
assertTrue("WebRequest not supported", resolver.supportsParameter(webRequestParameter));
|
||||||
|
|
||||||
|
Object result = resolver.resolveArgument(webRequestParameter, null, webRequest, null);
|
||||||
|
assertSame("Invalid result", webRequest, result);
|
||||||
|
}
|
||||||
|
|
||||||
public void supportedParams(ServletRequest p0,
|
public void supportedParams(ServletRequest p0,
|
||||||
MultipartRequest p1,
|
MultipartRequest p1,
|
||||||
HttpSession p2,
|
HttpSession p2,
|
||||||
Principal p3,
|
Principal p3,
|
||||||
Locale p4,
|
Locale p4,
|
||||||
InputStream p5,
|
InputStream p5,
|
||||||
Reader p9) {
|
Reader p6,
|
||||||
|
WebRequest p7) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue