@MVC handler methods reliably resolve MultipartRequest arguments with HiddenHttpMethodFilter (SPR-7296)
This commit is contained in:
parent
5e5a8a09cf
commit
037c277351
|
|
@ -85,6 +85,7 @@ import org.springframework.web.bind.support.WebArgumentResolver;
|
||||||
import org.springframework.web.bind.support.WebBindingInitializer;
|
import org.springframework.web.bind.support.WebBindingInitializer;
|
||||||
import org.springframework.web.context.request.NativeWebRequest;
|
import org.springframework.web.context.request.NativeWebRequest;
|
||||||
import org.springframework.web.context.request.RequestScope;
|
import org.springframework.web.context.request.RequestScope;
|
||||||
|
import org.springframework.web.multipart.MultipartRequest;
|
||||||
import org.springframework.web.portlet.HandlerAdapter;
|
import org.springframework.web.portlet.HandlerAdapter;
|
||||||
import org.springframework.web.portlet.ModelAndView;
|
import org.springframework.web.portlet.ModelAndView;
|
||||||
import org.springframework.web.portlet.bind.MissingPortletRequestParameterException;
|
import org.springframework.web.portlet.bind.MissingPortletRequestParameterException;
|
||||||
|
|
@ -582,17 +583,28 @@ public class AnnotationMethodHandlerAdapter extends PortletContentGenerator
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Object resolveStandardArgument(Class parameterType, NativeWebRequest webRequest)
|
protected Object resolveStandardArgument(Class<?> parameterType, NativeWebRequest webRequest)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
|
||||||
PortletRequest request = webRequest.getNativeRequest(PortletRequest.class);
|
PortletRequest request = webRequest.getNativeRequest(PortletRequest.class);
|
||||||
PortletResponse response = webRequest.getNativeResponse(PortletResponse.class);
|
PortletResponse response = webRequest.getNativeResponse(PortletResponse.class);
|
||||||
|
|
||||||
if (PortletRequest.class.isAssignableFrom(parameterType)) {
|
if (PortletRequest.class.isAssignableFrom(parameterType) ||
|
||||||
return request;
|
MultipartRequest.class.isAssignableFrom(parameterType)) {
|
||||||
|
Object nativeRequest = webRequest.getNativeRequest(parameterType);
|
||||||
|
if (nativeRequest == null) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Current request is not of type [" + parameterType.getName() + "]: " + request);
|
||||||
|
}
|
||||||
|
return nativeRequest;
|
||||||
}
|
}
|
||||||
else if (PortletResponse.class.isAssignableFrom(parameterType)) {
|
else if (PortletResponse.class.isAssignableFrom(parameterType)) {
|
||||||
return response;
|
Object nativeResponse = webRequest.getNativeResponse(parameterType);
|
||||||
|
if (nativeResponse == null) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Current response is not of type [" + parameterType.getName() + "]: " + response);
|
||||||
|
}
|
||||||
|
return nativeResponse;
|
||||||
}
|
}
|
||||||
else if (PortletSession.class.isAssignableFrom(parameterType)) {
|
else if (PortletSession.class.isAssignableFrom(parameterType)) {
|
||||||
return request.getPortletSession();
|
return request.getPortletSession();
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@ import org.springframework.web.bind.support.WebBindingInitializer;
|
||||||
import org.springframework.web.context.request.NativeWebRequest;
|
import org.springframework.web.context.request.NativeWebRequest;
|
||||||
import org.springframework.web.context.request.RequestScope;
|
import org.springframework.web.context.request.RequestScope;
|
||||||
import org.springframework.web.context.request.ServletWebRequest;
|
import org.springframework.web.context.request.ServletWebRequest;
|
||||||
|
import org.springframework.web.multipart.MultipartRequest;
|
||||||
import org.springframework.web.servlet.HandlerAdapter;
|
import org.springframework.web.servlet.HandlerAdapter;
|
||||||
import org.springframework.web.servlet.HandlerMapping;
|
import org.springframework.web.servlet.HandlerMapping;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
@ -770,16 +771,27 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Object resolveStandardArgument(Class parameterType, NativeWebRequest webRequest) throws Exception {
|
protected Object resolveStandardArgument(Class<?> parameterType, NativeWebRequest webRequest) throws Exception {
|
||||||
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
|
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
|
||||||
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
|
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
|
||||||
|
|
||||||
if (ServletRequest.class.isAssignableFrom(parameterType)) {
|
if (ServletRequest.class.isAssignableFrom(parameterType) ||
|
||||||
return request;
|
MultipartRequest.class.isAssignableFrom(parameterType)) {
|
||||||
|
Object nativeRequest = webRequest.getNativeRequest(parameterType);
|
||||||
|
if (nativeRequest == null) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Current request is not of type [" + parameterType.getName() + "]: " + request);
|
||||||
|
}
|
||||||
|
return nativeRequest;
|
||||||
}
|
}
|
||||||
else if (ServletResponse.class.isAssignableFrom(parameterType)) {
|
else if (ServletResponse.class.isAssignableFrom(parameterType)) {
|
||||||
this.responseArgumentUsed = true;
|
this.responseArgumentUsed = true;
|
||||||
return response;
|
Object nativeResponse = webRequest.getNativeResponse(parameterType);
|
||||||
|
if (nativeResponse == null) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Current response is not of type [" + parameterType.getName() + "]: " + response);
|
||||||
|
}
|
||||||
|
return nativeResponse;
|
||||||
}
|
}
|
||||||
else if (HttpSession.class.isAssignableFrom(parameterType)) {
|
else if (HttpSession.class.isAssignableFrom(parameterType)) {
|
||||||
return request.getSession();
|
return request.getSession();
|
||||||
|
|
|
||||||
|
|
@ -862,7 +862,7 @@ public class HandlerMethodInvoker {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Object resolveStandardArgument(Class parameterType, NativeWebRequest webRequest) throws Exception {
|
protected Object resolveStandardArgument(Class<?> parameterType, NativeWebRequest webRequest) throws Exception {
|
||||||
if (WebRequest.class.isAssignableFrom(parameterType)) {
|
if (WebRequest.class.isAssignableFrom(parameterType)) {
|
||||||
return webRequest;
|
return webRequest;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue