8483 Add support for MultipartFile arg type in RequestPartMethodArgumentResolver
This commit is contained in:
parent
26dbfba6c0
commit
e0d2e20fc4
|
|
@ -32,6 +32,7 @@ import org.springframework.web.bind.annotation.RequestPart;
|
||||||
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.method.support.ModelAndViewContainer;
|
import org.springframework.web.method.support.ModelAndViewContainer;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||||
import org.springframework.web.multipart.MultipartRequest;
|
import org.springframework.web.multipart.MultipartRequest;
|
||||||
import org.springframework.web.multipart.RequestPartServletServerHttpRequest;
|
import org.springframework.web.multipart.RequestPartServletServerHttpRequest;
|
||||||
|
|
@ -77,8 +78,11 @@ public class RequestPartMethodArgumentResolver extends AbstractMessageConverterM
|
||||||
}
|
}
|
||||||
|
|
||||||
String partName = getPartName(parameter);
|
String partName = getPartName(parameter);
|
||||||
HttpInputMessage inputMessage = new RequestPartServletServerHttpRequest(multipartRequest, partName);
|
if (MultipartFile.class.isAssignableFrom(parameter.getParameterType())) {
|
||||||
|
return multipartRequest.getFile(partName);
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpInputMessage inputMessage = new RequestPartServletServerHttpRequest(multipartRequest, partName);
|
||||||
Object arg = readWithMessageConverters(inputMessage, parameter, parameter.getParameterType());
|
Object arg = readWithMessageConverters(inputMessage, parameter, parameter.getParameterType());
|
||||||
|
|
||||||
if (isValidationApplicable(arg, parameter)) {
|
if (isValidationApplicable(arg, parameter)) {
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import static org.easymock.EasyMock.isA;
|
||||||
import static org.easymock.EasyMock.replay;
|
import static org.easymock.EasyMock.replay;
|
||||||
import static org.easymock.EasyMock.reset;
|
import static org.easymock.EasyMock.reset;
|
||||||
import static org.easymock.EasyMock.verify;
|
import static org.easymock.EasyMock.verify;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
|
@ -71,6 +72,7 @@ public class RequestPartMethodArgumentResolverTests {
|
||||||
private MethodParameter paramRequestPart;
|
private MethodParameter paramRequestPart;
|
||||||
private MethodParameter paramNamedRequestPart;
|
private MethodParameter paramNamedRequestPart;
|
||||||
private MethodParameter paramValidRequestPart;
|
private MethodParameter paramValidRequestPart;
|
||||||
|
private MethodParameter paramMultipartFile;
|
||||||
private MethodParameter paramInt;
|
private MethodParameter paramInt;
|
||||||
|
|
||||||
private NativeWebRequest webRequest;
|
private NativeWebRequest webRequest;
|
||||||
|
|
@ -82,12 +84,14 @@ public class RequestPartMethodArgumentResolverTests {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
Method handle = getClass().getMethod("handle", SimpleBean.class, SimpleBean.class, SimpleBean.class, Integer.TYPE);
|
Method handle = getClass().getMethod("handle",
|
||||||
|
SimpleBean.class, SimpleBean.class, SimpleBean.class, MultipartFile.class, Integer.TYPE);
|
||||||
paramRequestPart = new MethodParameter(handle, 0);
|
paramRequestPart = new MethodParameter(handle, 0);
|
||||||
paramRequestPart.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer());
|
paramRequestPart.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer());
|
||||||
paramNamedRequestPart = new MethodParameter(handle, 1);
|
paramNamedRequestPart = new MethodParameter(handle, 1);
|
||||||
paramValidRequestPart = new MethodParameter(handle, 2);
|
paramValidRequestPart = new MethodParameter(handle, 2);
|
||||||
paramInt = new MethodParameter(handle, 3);
|
paramMultipartFile = new MethodParameter(handle, 3);
|
||||||
|
paramInt = new MethodParameter(handle, 4);
|
||||||
|
|
||||||
messageConverter = createMock(HttpMessageConverter.class);
|
messageConverter = createMock(HttpMessageConverter.class);
|
||||||
expect(messageConverter.getSupportedMediaTypes()).andReturn(Collections.singletonList(MediaType.TEXT_PLAIN));
|
expect(messageConverter.getSupportedMediaTypes()).andReturn(Collections.singletonList(MediaType.TEXT_PLAIN));
|
||||||
|
|
@ -119,6 +123,13 @@ public class RequestPartMethodArgumentResolverTests {
|
||||||
testResolveArgument(new SimpleBean("foo"), paramNamedRequestPart);
|
testResolveArgument(new SimpleBean("foo"), paramNamedRequestPart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void resolveMultipartFile() throws Exception {
|
||||||
|
Object actual = resolver.resolveArgument(paramMultipartFile, null, webRequest, null);
|
||||||
|
assertNotNull(actual);
|
||||||
|
assertSame(multipartFile, actual);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void resolveRequestPartNotValid() throws Exception {
|
public void resolveRequestPartNotValid() throws Exception {
|
||||||
try {
|
try {
|
||||||
|
|
@ -156,6 +167,7 @@ public class RequestPartMethodArgumentResolverTests {
|
||||||
public void handle(@RequestPart SimpleBean requestPart,
|
public void handle(@RequestPart SimpleBean requestPart,
|
||||||
@RequestPart("requestPart") SimpleBean namedRequestPart,
|
@RequestPart("requestPart") SimpleBean namedRequestPart,
|
||||||
@Valid @RequestPart("requestPart") SimpleBean validRequestPart,
|
@Valid @RequestPart("requestPart") SimpleBean validRequestPart,
|
||||||
|
@RequestPart("requestPart") MultipartFile multipartFile,
|
||||||
int i) {
|
int i) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue