|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2015 the original author or authors. |
|
|
|
* Copyright 2002-2016 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -41,6 +41,7 @@ import org.springframework.mock.web.test.MockHttpServletResponse; |
|
|
|
import org.springframework.mock.web.test.MockMultipartFile; |
|
|
|
import org.springframework.mock.web.test.MockMultipartFile; |
|
|
|
import org.springframework.mock.web.test.MockMultipartHttpServletRequest; |
|
|
|
import org.springframework.mock.web.test.MockMultipartHttpServletRequest; |
|
|
|
import org.springframework.mock.web.test.MockPart; |
|
|
|
import org.springframework.mock.web.test.MockPart; |
|
|
|
|
|
|
|
import org.springframework.util.ReflectionUtils; |
|
|
|
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; |
|
|
|
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; |
|
|
|
import org.springframework.web.bind.MethodArgumentNotValidException; |
|
|
|
import org.springframework.web.bind.MethodArgumentNotValidException; |
|
|
|
import org.springframework.web.bind.WebDataBinder; |
|
|
|
import org.springframework.web.bind.WebDataBinder; |
|
|
|
@ -53,7 +54,6 @@ import org.springframework.web.method.support.ModelAndViewContainer; |
|
|
|
import org.springframework.web.multipart.MultipartException; |
|
|
|
import org.springframework.web.multipart.MultipartException; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
|
import org.springframework.web.multipart.support.MissingServletRequestPartException; |
|
|
|
import org.springframework.web.multipart.support.MissingServletRequestPartException; |
|
|
|
import org.springframework.web.multipart.support.RequestPartServletServerHttpRequest; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.*; |
|
|
|
import static org.junit.Assert.*; |
|
|
|
import static org.mockito.BDDMockito.*; |
|
|
|
import static org.mockito.BDDMockito.*; |
|
|
|
@ -86,7 +86,9 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
private MethodParameter paramPartArray; |
|
|
|
private MethodParameter paramPartArray; |
|
|
|
private MethodParameter paramRequestParamAnnot; |
|
|
|
private MethodParameter paramRequestParamAnnot; |
|
|
|
private MethodParameter optionalMultipartFile; |
|
|
|
private MethodParameter optionalMultipartFile; |
|
|
|
|
|
|
|
private MethodParameter optionalMultipartFileList; |
|
|
|
private MethodParameter optionalPart; |
|
|
|
private MethodParameter optionalPart; |
|
|
|
|
|
|
|
private MethodParameter optionalPartList; |
|
|
|
private MethodParameter optionalRequestPart; |
|
|
|
private MethodParameter optionalRequestPart; |
|
|
|
|
|
|
|
|
|
|
|
private NativeWebRequest webRequest; |
|
|
|
private NativeWebRequest webRequest; |
|
|
|
@ -97,10 +99,7 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
@Before |
|
|
|
@Before |
|
|
|
public void setUp() throws Exception { |
|
|
|
public void setUp() throws Exception { |
|
|
|
Method method = getClass().getMethod("handle", SimpleBean.class, SimpleBean.class, |
|
|
|
Method method = ReflectionUtils.findMethod(getClass(), "handle", (Class<?>[]) null); |
|
|
|
SimpleBean.class, MultipartFile.class, List.class, MultipartFile[].class, |
|
|
|
|
|
|
|
Integer.TYPE, MultipartFile.class, Part.class, List.class, Part[].class, |
|
|
|
|
|
|
|
MultipartFile.class, Optional.class, Optional.class, Optional.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
paramRequestPart = new SynthesizingMethodParameter(method, 0); |
|
|
|
paramRequestPart = new SynthesizingMethodParameter(method, 0); |
|
|
|
paramRequestPart.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer()); |
|
|
|
paramRequestPart.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer()); |
|
|
|
@ -119,9 +118,13 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
paramRequestParamAnnot = new SynthesizingMethodParameter(method, 11); |
|
|
|
paramRequestParamAnnot = new SynthesizingMethodParameter(method, 11); |
|
|
|
optionalMultipartFile = new SynthesizingMethodParameter(method, 12); |
|
|
|
optionalMultipartFile = new SynthesizingMethodParameter(method, 12); |
|
|
|
optionalMultipartFile.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer()); |
|
|
|
optionalMultipartFile.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer()); |
|
|
|
optionalPart = new SynthesizingMethodParameter(method, 13); |
|
|
|
optionalMultipartFileList = new SynthesizingMethodParameter(method, 13); |
|
|
|
|
|
|
|
optionalMultipartFileList.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer()); |
|
|
|
|
|
|
|
optionalPart = new SynthesizingMethodParameter(method, 14); |
|
|
|
optionalPart.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer()); |
|
|
|
optionalPart.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer()); |
|
|
|
optionalRequestPart = new SynthesizingMethodParameter(method, 14); |
|
|
|
optionalPartList = new SynthesizingMethodParameter(method, 15); |
|
|
|
|
|
|
|
optionalPartList.initParameterNameDiscovery(new LocalVariableTableParameterNameDiscoverer()); |
|
|
|
|
|
|
|
optionalRequestPart = new SynthesizingMethodParameter(method, 16); |
|
|
|
|
|
|
|
|
|
|
|
messageConverter = mock(HttpMessageConverter.class); |
|
|
|
messageConverter = mock(HttpMessageConverter.class); |
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
given(messageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN)); |
|
|
|
@ -136,35 +139,41 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
multipartRequest = new MockMultipartHttpServletRequest(); |
|
|
|
multipartRequest = new MockMultipartHttpServletRequest(); |
|
|
|
multipartRequest.addFile(multipartFile1); |
|
|
|
multipartRequest.addFile(multipartFile1); |
|
|
|
multipartRequest.addFile(multipartFile2); |
|
|
|
multipartRequest.addFile(multipartFile2); |
|
|
|
|
|
|
|
multipartRequest.addFile(new MockMultipartFile("otherPart", "", "text/plain", content)); |
|
|
|
webRequest = new ServletWebRequest(multipartRequest, new MockHttpServletResponse()); |
|
|
|
webRequest = new ServletWebRequest(multipartRequest, new MockHttpServletResponse()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void supportsParameter() { |
|
|
|
public void supportsParameter() { |
|
|
|
assertTrue("RequestPart parameter not supported", resolver.supportsParameter(paramRequestPart)); |
|
|
|
assertTrue(resolver.supportsParameter(paramRequestPart)); |
|
|
|
assertTrue("MultipartFile parameter not supported", resolver.supportsParameter(paramMultipartFileNotAnnot)); |
|
|
|
assertTrue(resolver.supportsParameter(paramNamedRequestPart)); |
|
|
|
assertTrue("Part parameter not supported", resolver.supportsParameter(paramPart)); |
|
|
|
assertTrue(resolver.supportsParameter(paramValidRequestPart)); |
|
|
|
assertTrue("List<Part> parameter not supported", resolver.supportsParameter(paramPartList)); |
|
|
|
assertTrue(resolver.supportsParameter(paramMultipartFile)); |
|
|
|
assertTrue("Part[] parameter not supported", resolver.supportsParameter(paramPartArray)); |
|
|
|
assertTrue(resolver.supportsParameter(paramMultipartFileList)); |
|
|
|
assertTrue("MultipartFile parameter not supported", resolver.supportsParameter(paramMultipartFile)); |
|
|
|
assertTrue(resolver.supportsParameter(paramMultipartFileArray)); |
|
|
|
assertTrue("List<MultipartFile> parameter not supported", resolver.supportsParameter(paramMultipartFileList)); |
|
|
|
assertFalse(resolver.supportsParameter(paramInt)); |
|
|
|
assertTrue("MultipartFile[] parameter not supported", resolver.supportsParameter(paramMultipartFileArray)); |
|
|
|
assertTrue(resolver.supportsParameter(paramMultipartFileNotAnnot)); |
|
|
|
assertFalse("non-RequestPart parameter should not be supported", resolver.supportsParameter(paramInt)); |
|
|
|
assertTrue(resolver.supportsParameter(paramPart)); |
|
|
|
assertFalse("@RequestParam args should not be supported", resolver.supportsParameter(paramRequestParamAnnot)); |
|
|
|
assertTrue(resolver.supportsParameter(paramPartList)); |
|
|
|
|
|
|
|
assertTrue(resolver.supportsParameter(paramPartArray)); |
|
|
|
|
|
|
|
assertFalse(resolver.supportsParameter(paramRequestParamAnnot)); |
|
|
|
|
|
|
|
assertTrue(resolver.supportsParameter(optionalMultipartFile)); |
|
|
|
|
|
|
|
assertTrue(resolver.supportsParameter(optionalMultipartFileList)); |
|
|
|
|
|
|
|
assertTrue(resolver.supportsParameter(optionalPart)); |
|
|
|
|
|
|
|
assertTrue(resolver.supportsParameter(optionalPartList)); |
|
|
|
|
|
|
|
assertTrue(resolver.supportsParameter(optionalRequestPart)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void resolveMultipartFile() throws Exception { |
|
|
|
public void resolveMultipartFile() throws Exception { |
|
|
|
Object actual = resolver.resolveArgument(paramMultipartFile, null, webRequest, null); |
|
|
|
Object actual = resolver.resolveArgument(paramMultipartFile, null, webRequest, null); |
|
|
|
assertNotNull(actual); |
|
|
|
|
|
|
|
assertSame(multipartFile1, actual); |
|
|
|
assertSame(multipartFile1, actual); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void resolveMultipartFileList() throws Exception { |
|
|
|
public void resolveMultipartFileList() throws Exception { |
|
|
|
Object actual = resolver.resolveArgument(paramMultipartFileList, null, webRequest, null); |
|
|
|
Object actual = resolver.resolveArgument(paramMultipartFileList, null, webRequest, null); |
|
|
|
assertNotNull(actual); |
|
|
|
|
|
|
|
assertTrue(actual instanceof List); |
|
|
|
assertTrue(actual instanceof List); |
|
|
|
assertEquals(Arrays.asList(multipartFile1, multipartFile2), actual); |
|
|
|
assertEquals(Arrays.asList(multipartFile1, multipartFile2), actual); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -175,6 +184,7 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
assertNotNull(actual); |
|
|
|
assertNotNull(actual); |
|
|
|
assertTrue(actual instanceof MultipartFile[]); |
|
|
|
assertTrue(actual instanceof MultipartFile[]); |
|
|
|
MultipartFile[] parts = (MultipartFile[]) actual; |
|
|
|
MultipartFile[] parts = (MultipartFile[]) actual; |
|
|
|
|
|
|
|
assertEquals(2, parts.length); |
|
|
|
assertEquals(parts[0], multipartFile1); |
|
|
|
assertEquals(parts[0], multipartFile1); |
|
|
|
assertEquals(parts[1], multipartFile2); |
|
|
|
assertEquals(parts[1], multipartFile2); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -184,6 +194,7 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); |
|
|
|
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); |
|
|
|
MultipartFile expected = new MockMultipartFile("multipartFileNotAnnot", "Hello World".getBytes()); |
|
|
|
MultipartFile expected = new MockMultipartFile("multipartFileNotAnnot", "Hello World".getBytes()); |
|
|
|
request.addFile(expected); |
|
|
|
request.addFile(expected); |
|
|
|
|
|
|
|
request.addFile(new MockMultipartFile("otherPart", "", "text/plain", "Hello World".getBytes())); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
Object result = resolver.resolveArgument(paramMultipartFileNotAnnot, null, webRequest, null); |
|
|
|
Object result = resolver.resolveArgument(paramMultipartFileNotAnnot, null, webRequest, null); |
|
|
|
@ -194,52 +205,52 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void resolvePartArgument() throws Exception { |
|
|
|
public void resolvePartArgument() throws Exception { |
|
|
|
MockPart expected = new MockPart("part", "Hello World".getBytes()); |
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.setMethod("POST"); |
|
|
|
request.setMethod("POST"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
|
|
|
|
MockPart expected = new MockPart("part", "Hello World".getBytes()); |
|
|
|
request.addPart(expected); |
|
|
|
request.addPart(expected); |
|
|
|
|
|
|
|
request.addPart(new MockPart("otherPart", "Hello World".getBytes())); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
Object result = resolver.resolveArgument(paramPart, null, webRequest, null); |
|
|
|
Object result = resolver.resolveArgument(paramPart, null, webRequest, null); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(result instanceof Part); |
|
|
|
assertTrue(result instanceof Part); |
|
|
|
assertEquals("Invalid result", expected, result); |
|
|
|
assertEquals("Invalid result", expected, result); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void resolvePartListArgument() throws Exception { |
|
|
|
public void resolvePartListArgument() throws Exception { |
|
|
|
MockPart part1 = new MockPart("requestPart1", "Hello World 1".getBytes()); |
|
|
|
|
|
|
|
MockPart part2 = new MockPart("requestPart2", "Hello World 2".getBytes()); |
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.setMethod("POST"); |
|
|
|
request.setMethod("POST"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
|
|
|
|
MockPart part1 = new MockPart("requestPart", "Hello World 1".getBytes()); |
|
|
|
|
|
|
|
MockPart part2 = new MockPart("requestPart", "Hello World 2".getBytes()); |
|
|
|
request.addPart(part1); |
|
|
|
request.addPart(part1); |
|
|
|
request.addPart(part2); |
|
|
|
request.addPart(part2); |
|
|
|
|
|
|
|
request.addPart(new MockPart("otherPart", "Hello World".getBytes())); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
Object result = resolver.resolveArgument(paramPartList, null, webRequest, null); |
|
|
|
Object result = resolver.resolveArgument(paramPartList, null, webRequest, null); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(result instanceof List); |
|
|
|
assertTrue(result instanceof List); |
|
|
|
assertEquals(Arrays.asList(part1, part2), result); |
|
|
|
assertEquals(Arrays.asList(part1, part2), result); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void resolvePartArrayArgument() throws Exception { |
|
|
|
public void resolvePartArrayArgument() throws Exception { |
|
|
|
MockPart part1 = new MockPart("requestPart1", "Hello World 1".getBytes()); |
|
|
|
|
|
|
|
MockPart part2 = new MockPart("requestPart2", "Hello World 2".getBytes()); |
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
request.setMethod("POST"); |
|
|
|
request.setMethod("POST"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
|
|
|
|
MockPart part1 = new MockPart("requestPart", "Hello World 1".getBytes()); |
|
|
|
|
|
|
|
MockPart part2 = new MockPart("requestPart", "Hello World 2".getBytes()); |
|
|
|
request.addPart(part1); |
|
|
|
request.addPart(part1); |
|
|
|
request.addPart(part2); |
|
|
|
request.addPart(part2); |
|
|
|
|
|
|
|
request.addPart(new MockPart("otherPart", "Hello World".getBytes())); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
Object result = resolver.resolveArgument(paramPartArray, null, webRequest, null); |
|
|
|
Object result = resolver.resolveArgument(paramPartArray, null, webRequest, null); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(result instanceof Part[]); |
|
|
|
assertTrue(result instanceof Part[]); |
|
|
|
Part[] parts = (Part[]) result; |
|
|
|
Part[] parts = (Part[]) result; |
|
|
|
assertThat(parts, Matchers.arrayWithSize(2)); |
|
|
|
assertEquals(2, parts.length); |
|
|
|
assertEquals(parts[0], part1); |
|
|
|
assertEquals(parts[0], part1); |
|
|
|
assertEquals(parts[1], part2); |
|
|
|
assertEquals(parts[1], part2); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -302,8 +313,8 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
@Test // SPR-9079
|
|
|
|
@Test // SPR-9079
|
|
|
|
public void isMultipartRequestPut() throws Exception { |
|
|
|
public void isMultipartRequestPut() throws Exception { |
|
|
|
this.multipartRequest.setMethod("PUT"); |
|
|
|
this.multipartRequest.setMethod("PUT"); |
|
|
|
Object actual = resolver.resolveArgument(paramMultipartFile, null, webRequest, null); |
|
|
|
Object actualValue = resolver.resolveArgument(paramMultipartFile, null, webRequest, null); |
|
|
|
assertSame(multipartFile1, actual); |
|
|
|
assertSame(multipartFile1, actualValue); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
@ -311,12 +322,16 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); |
|
|
|
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); |
|
|
|
MultipartFile expected = new MockMultipartFile("optionalMultipartFile", "Hello World".getBytes()); |
|
|
|
MultipartFile expected = new MockMultipartFile("optionalMultipartFile", "Hello World".getBytes()); |
|
|
|
request.addFile(expected); |
|
|
|
request.addFile(expected); |
|
|
|
|
|
|
|
request.addFile(new MockMultipartFile("otherPart", "", "text/plain", "Hello World".getBytes())); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
Object result = resolver.resolveArgument(optionalMultipartFile, null, webRequest, null); |
|
|
|
Object actualValue = resolver.resolveArgument(optionalMultipartFile, null, webRequest, null); |
|
|
|
|
|
|
|
assertTrue(actualValue instanceof Optional); |
|
|
|
|
|
|
|
assertEquals("Invalid result", expected, ((Optional) actualValue).get()); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(result instanceof Optional); |
|
|
|
actualValue = resolver.resolveArgument(optionalMultipartFile, null, webRequest, null); |
|
|
|
assertEquals("Invalid result", expected, ((Optional) result).get()); |
|
|
|
assertTrue(actualValue instanceof Optional); |
|
|
|
|
|
|
|
assertEquals("Invalid result", expected, ((Optional) actualValue).get()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
@ -324,10 +339,62 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); |
|
|
|
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
Object result = resolver.resolveArgument(optionalMultipartFile, null, webRequest, null); |
|
|
|
Object actualValue = resolver.resolveArgument(optionalMultipartFile, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalMultipartFile, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalMultipartFileArgumentWithoutMultipartRequest() throws Exception { |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(new MockHttpServletRequest()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalMultipartFile, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalMultipartFile, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalMultipartFileList() throws Exception { |
|
|
|
|
|
|
|
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); |
|
|
|
|
|
|
|
MultipartFile expected = new MockMultipartFile("requestPart", "Hello World".getBytes()); |
|
|
|
|
|
|
|
request.addFile(expected); |
|
|
|
|
|
|
|
request.addFile(new MockMultipartFile("otherPart", "", "text/plain", "Hello World".getBytes())); |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalMultipartFileList, null, webRequest, null); |
|
|
|
|
|
|
|
assertTrue(actualValue instanceof Optional); |
|
|
|
|
|
|
|
assertEquals("Invalid result", Collections.singletonList(expected), ((Optional) actualValue).get()); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(result instanceof Optional); |
|
|
|
actualValue = resolver.resolveArgument(optionalMultipartFileList, null, webRequest, null); |
|
|
|
assertFalse("Invalid result", ((Optional) result).isPresent()); |
|
|
|
assertTrue(actualValue instanceof Optional); |
|
|
|
|
|
|
|
assertEquals("Invalid result", Collections.singletonList(expected), ((Optional) actualValue).get()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalMultipartFileListNotPresent() throws Exception { |
|
|
|
|
|
|
|
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalMultipartFileList, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalMultipartFileList, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalMultipartFileListWithoutMultipartRequest() throws Exception { |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(new MockHttpServletRequest()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalMultipartFileList, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalMultipartFileList, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
@ -337,12 +404,16 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
request.setMethod("POST"); |
|
|
|
request.setMethod("POST"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
request.addPart(expected); |
|
|
|
request.addPart(expected); |
|
|
|
|
|
|
|
request.addPart(new MockPart("otherPart", "Hello World".getBytes())); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
Object result = resolver.resolveArgument(optionalPart, null, webRequest, null); |
|
|
|
Object actualValue = resolver.resolveArgument(optionalPart, null, webRequest, null); |
|
|
|
|
|
|
|
assertTrue(actualValue instanceof Optional); |
|
|
|
|
|
|
|
assertEquals("Invalid result", expected, ((Optional) actualValue).get()); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(result instanceof Optional); |
|
|
|
actualValue = resolver.resolveArgument(optionalPart, null, webRequest, null); |
|
|
|
assertEquals("Invalid result", expected, ((Optional) result).get()); |
|
|
|
assertTrue(actualValue instanceof Optional); |
|
|
|
|
|
|
|
assertEquals("Invalid result", expected, ((Optional) actualValue).get()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
@ -352,36 +423,108 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
Object result = resolver.resolveArgument(optionalPart, null, webRequest, null); |
|
|
|
Object actualValue = resolver.resolveArgument(optionalPart, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalPart, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalPartArgumentWithoutMultipartRequest() throws Exception { |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(new MockHttpServletRequest()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalPart, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalPart, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalPartList() throws Exception { |
|
|
|
|
|
|
|
MockPart expected = new MockPart("requestPart", "Hello World".getBytes()); |
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
|
|
|
|
request.setMethod("POST"); |
|
|
|
|
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
|
|
|
|
request.addPart(expected); |
|
|
|
|
|
|
|
request.addPart(new MockPart("otherPart", "Hello World".getBytes())); |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalPartList, null, webRequest, null); |
|
|
|
|
|
|
|
assertTrue(actualValue instanceof Optional); |
|
|
|
|
|
|
|
assertEquals("Invalid result", Collections.singletonList(expected), ((Optional) actualValue).get()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalPartList, null, webRequest, null); |
|
|
|
|
|
|
|
assertTrue(actualValue instanceof Optional); |
|
|
|
|
|
|
|
assertEquals("Invalid result", Collections.singletonList(expected), ((Optional) actualValue).get()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalPartListNotPresent() throws Exception { |
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
|
|
|
|
request.setMethod("POST"); |
|
|
|
|
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalPartList, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(result instanceof Optional); |
|
|
|
actualValue = resolver.resolveArgument(optionalPartList, null, webRequest, null); |
|
|
|
assertFalse("Invalid result", ((Optional) result).isPresent()); |
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalPartListWithoutMultipartRequest() throws Exception { |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(new MockHttpServletRequest()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalPartList, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalPartList, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void resolveOptionalRequestPart() throws Exception { |
|
|
|
public void resolveOptionalRequestPart() throws Exception { |
|
|
|
SimpleBean simpleBean = new SimpleBean("foo"); |
|
|
|
SimpleBean simpleBean = new SimpleBean("foo"); |
|
|
|
|
|
|
|
|
|
|
|
given(messageConverter.canRead(SimpleBean.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
given(messageConverter.canRead(SimpleBean.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
given(messageConverter.read(eq(SimpleBean.class), isA(HttpInputMessage.class))).willReturn(simpleBean); |
|
|
|
given(messageConverter.read(eq(SimpleBean.class), isA(HttpInputMessage.class))).willReturn(simpleBean); |
|
|
|
|
|
|
|
|
|
|
|
ModelAndViewContainer mavContainer = new ModelAndViewContainer(); |
|
|
|
ModelAndViewContainer mavContainer = new ModelAndViewContainer(); |
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalRequestPart, mavContainer, webRequest, new ValidatingBinderFactory()); |
|
|
|
Object actualValue = resolver.resolveArgument(optionalRequestPart, mavContainer, webRequest, new ValidatingBinderFactory()); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.of(simpleBean), actualValue); |
|
|
|
|
|
|
|
assertFalse("The requestHandled flag shouldn't change", mavContainer.isRequestHandled()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalRequestPart, mavContainer, webRequest, new ValidatingBinderFactory()); |
|
|
|
assertEquals("Invalid argument value", Optional.of(simpleBean), actualValue); |
|
|
|
assertEquals("Invalid argument value", Optional.of(simpleBean), actualValue); |
|
|
|
assertFalse("The requestHandled flag shouldn't change", mavContainer.isRequestHandled()); |
|
|
|
assertFalse("The requestHandled flag shouldn't change", mavContainer.isRequestHandled()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void resolveOptionalRequestPartNotPresent() throws Exception { |
|
|
|
public void resolveOptionalRequestPartNotPresent() throws Exception { |
|
|
|
given(messageConverter.canRead(SimpleBean.class, MediaType.TEXT_PLAIN)).willReturn(true); |
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
given(messageConverter.read(eq(SimpleBean.class), isA(RequestPartServletServerHttpRequest.class))).willReturn(null); |
|
|
|
request.setMethod("POST"); |
|
|
|
|
|
|
|
request.setContentType("multipart/form-data"); |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(request); |
|
|
|
|
|
|
|
|
|
|
|
ModelAndViewContainer mavContainer = new ModelAndViewContainer(); |
|
|
|
Object actualValue = resolver.resolveArgument(optionalRequestPart, null, webRequest, null); |
|
|
|
Object actualValue = resolver.resolveArgument(optionalRequestPart, mavContainer, webRequest, new ValidatingBinderFactory()); |
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalRequestPart, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void resolveOptionalRequestPartWithoutMultipartRequest() throws Exception { |
|
|
|
|
|
|
|
webRequest = new ServletWebRequest(new MockHttpServletRequest()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(optionalRequestPart, null, webRequest, null); |
|
|
|
|
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
actualValue = resolver.resolveArgument(optionalRequestPart, null, webRequest, null); |
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
assertEquals("Invalid argument value", Optional.empty(), actualValue); |
|
|
|
assertFalse("The requestHandled flag shouldn't change", mavContainer.isRequestHandled()); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -390,8 +533,8 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
given(messageConverter.read(eq(SimpleBean.class), isA(HttpInputMessage.class))).willReturn(argValue); |
|
|
|
given(messageConverter.read(eq(SimpleBean.class), isA(HttpInputMessage.class))).willReturn(argValue); |
|
|
|
|
|
|
|
|
|
|
|
ModelAndViewContainer mavContainer = new ModelAndViewContainer(); |
|
|
|
ModelAndViewContainer mavContainer = new ModelAndViewContainer(); |
|
|
|
Object actualValue = resolver.resolveArgument(parameter, mavContainer, webRequest, new ValidatingBinderFactory()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object actualValue = resolver.resolveArgument(parameter, mavContainer, webRequest, new ValidatingBinderFactory()); |
|
|
|
assertEquals("Invalid argument value", argValue, actualValue); |
|
|
|
assertEquals("Invalid argument value", argValue, actualValue); |
|
|
|
assertFalse("The requestHandled flag shouldn't change", mavContainer.isRequestHandled()); |
|
|
|
assertFalse("The requestHandled flag shouldn't change", mavContainer.isRequestHandled()); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -425,22 +568,26 @@ public class RequestPartMethodArgumentResolverTests { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@SuppressWarnings("unused") |
|
|
|
@SuppressWarnings("unused") |
|
|
|
public void handle(@RequestPart SimpleBean requestPart, |
|
|
|
public void handle( |
|
|
|
@RequestPart(value="requestPart", required=false) SimpleBean namedRequestPart, |
|
|
|
@RequestPart SimpleBean requestPart, |
|
|
|
@Valid @RequestPart("requestPart") SimpleBean validRequestPart, |
|
|
|
@RequestPart(value="requestPart", required=false) SimpleBean namedRequestPart, |
|
|
|
@RequestPart("requestPart") MultipartFile multipartFile, |
|
|
|
@Valid @RequestPart("requestPart") SimpleBean validRequestPart, |
|
|
|
@RequestPart("requestPart") List<MultipartFile> multipartFileList, |
|
|
|
@RequestPart("requestPart") MultipartFile multipartFile, |
|
|
|
@RequestPart("requestPart") MultipartFile[] multipartFileArray, |
|
|
|
@RequestPart("requestPart") List<MultipartFile> multipartFileList, |
|
|
|
int i, |
|
|
|
@RequestPart("requestPart") MultipartFile[] multipartFileArray, |
|
|
|
MultipartFile multipartFileNotAnnot, |
|
|
|
int i, |
|
|
|
Part part, |
|
|
|
MultipartFile multipartFileNotAnnot, |
|
|
|
@RequestPart("part") List<Part> partList, |
|
|
|
Part part, |
|
|
|
@RequestPart("part") Part[] partArray, |
|
|
|
@RequestPart("requestPart") List<Part> partList, |
|
|
|
@RequestParam MultipartFile requestParamAnnot, |
|
|
|
@RequestPart("requestPart") Part[] partArray, |
|
|
|
Optional<MultipartFile> optionalMultipartFile, |
|
|
|
@RequestParam MultipartFile requestParamAnnot, |
|
|
|
Optional<Part> optionalPart, |
|
|
|
Optional<MultipartFile> optionalMultipartFile, |
|
|
|
@RequestPart("requestPart") Optional<SimpleBean> optionalRequestPart) { |
|
|
|
@RequestPart("requestPart") Optional<List<MultipartFile>> optionalMultipartFileList, |
|
|
|
|
|
|
|
Optional<Part> optionalPart, |
|
|
|
|
|
|
|
@RequestPart("requestPart") Optional<List<Part>> optionalPartList, |
|
|
|
|
|
|
|
@RequestPart("requestPart") Optional<SimpleBean> optionalRequestPart) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|