@Test public void doesNotSupportReactiveWrapper() { MethodParameter param; try { param = this.testMethod.annot(requestParam()).arg(Mono.class, String.class); this.resolver.supportsParameter(param); fail(); } catch (IllegalStateException ex) { assertTrue("Unexpected error message:\n" + ex.getMessage(), ex.getMessage().startsWith( "RequestParamMethodArgumentResolver doesn't support reactive type wrapper")); } try { param = this.testMethod.annotNotPresent(RequestParam.class).arg(Mono.class, String.class); this.resolver.supportsParameter(param); fail(); } catch (IllegalStateException ex) { assertTrue("Unexpected error message:\n" + ex.getMessage(), ex.getMessage().startsWith( "RequestParamMethodArgumentResolver doesn't support reactive type wrapper")); } }
@Test public void resolveMapOfString() throws Exception { String name = "foo"; String value = "bar"; request.addParameter(name, value); Map<String, String> expected = Collections.singletonMap(name, value); MethodParameter param = this.testMethod.annot(requestParam().noName()).arg(Map.class, String.class, String.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof Map); assertEquals("Invalid result", expected, result); }
@Test public void resolveMapArgumentWithQueryString() throws Exception { MethodParameter param = this.testMethod.annot(requestParam().name("")).arg(Map.class); Object result= resolve(param, MockServerWebExchange.from(MockServerHttpRequest.get("/path?foo=bar"))); assertTrue(result instanceof Map); assertEquals(Collections.singletonMap("foo", "bar"), result); }
@Test @SuppressWarnings("unchecked") public void resolveMapOfMultipartFile() throws Exception { MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); MultipartFile expected1 = new MockMultipartFile("mfile", "Hello World".getBytes()); MultipartFile expected2 = new MockMultipartFile("other", "Hello World 3".getBytes()); request.addFile(expected1); request.addFile(expected2); webRequest = new ServletWebRequest(request); MethodParameter param = this.testMethod.annot(requestParam().noName()).arg(Map.class, String.class, MultipartFile.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof Map); Map<String, MultipartFile> resultMap = (Map<String, MultipartFile>) result; assertEquals(2, resultMap.size()); assertEquals(expected1, resultMap.get("mfile")); assertEquals(expected2, resultMap.get("other")); }
@Test @SuppressWarnings("unchecked") public void resolveMapOfPart() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setContentType("multipart/form-data"); Part expected1 = new MockPart("mfile", "Hello World".getBytes()); Part expected2 = new MockPart("other", "Hello World 3".getBytes()); request.addPart(expected1); request.addPart(expected2); webRequest = new ServletWebRequest(request); MethodParameter param = this.testMethod.annot(requestParam().noName()).arg(Map.class, String.class, Part.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof Map); Map<String, Part> resultMap = (Map<String, Part>) result; assertEquals(2, resultMap.size()); assertEquals(expected1, resultMap.get("mfile")); assertEquals(expected2, resultMap.get("other")); }
@Test public void resolveEmptyValueRequiredWithoutDefault() throws Exception { request.addParameter("name", ""); MethodParameter param = this.testMethod.annot(requestParam().notRequired()).arg(String.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertEquals("", result); }
@Test public void resolveDefaultValue() throws Exception { MethodParameter param = this.testMethod.annot(requestParam().notRequired("bar")).arg(String.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof String); assertEquals("Invalid result", "bar", result); }
@Test public void resolveEmptyValueRequiredWithoutDefault() { MethodParameter param = this.testMethod.annot(requestParam()).arg(String.class); MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/path?name=")); assertEquals("", resolve(param, exchange)); }
@Test // SPR-10180 public void resolveEmptyValueToDefault() throws Exception { request.addParameter("name", ""); MethodParameter param = this.testMethod.annot(requestParam().notRequired("bar")).arg(String.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertEquals("bar", result); }
@Test @SuppressWarnings("unchecked") public void resolveMultiValueMapOfMultipartFile() throws Exception { MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest(); MultipartFile expected1 = new MockMultipartFile("mfilelist", "Hello World 1".getBytes()); MultipartFile expected2 = new MockMultipartFile("mfilelist", "Hello World 2".getBytes()); MultipartFile expected3 = new MockMultipartFile("other", "Hello World 3".getBytes()); request.addFile(expected1); request.addFile(expected2); request.addFile(expected3); webRequest = new ServletWebRequest(request); MethodParameter param = this.testMethod.annot(requestParam().noName()).arg(MultiValueMap.class, String.class, MultipartFile.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof MultiValueMap); MultiValueMap<String, MultipartFile> resultMap = (MultiValueMap<String, MultipartFile>) result; assertEquals(2, resultMap.size()); assertEquals(2, resultMap.get("mfilelist").size()); assertEquals(expected1, resultMap.get("mfilelist").get(0)); assertEquals(expected2, resultMap.get("mfilelist").get(1)); assertEquals(1, resultMap.get("other").size()); assertEquals(expected3, resultMap.get("other").get(0)); }
@Test public void supportsParameter() { MethodParameter param = this.testMethod.annot(requestParam().name("")).arg(Map.class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annotPresent(RequestParam.class).arg(MultiValueMap.class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annot(requestParam().name("name")).arg(Map.class); assertFalse(this.resolver.supportsParameter(param)); param = this.testMethod.annotNotPresent(RequestParam.class).arg(Map.class); assertFalse(this.resolver.supportsParameter(param)); try { param = this.testMethod.annot(requestParam()).arg(Mono.class, Map.class); this.resolver.supportsParameter(param); fail(); } catch (IllegalStateException ex) { assertTrue("Unexpected error message:\n" + ex.getMessage(), ex.getMessage().startsWith( "RequestParamMapMethodArgumentResolver doesn't support reactive type wrapper")); } }
@Test public void supportsParameter() { MethodParameter param = this.testMethod.annot(requestParam().notRequired("bar")).arg(String.class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annotPresent(RequestParam.class).arg(String[].class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annot(requestParam().name("name")).arg(Map.class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annot(requestParam().name("")).arg(Map.class); assertFalse(this.resolver.supportsParameter(param)); param = this.testMethod.annotNotPresent(RequestParam.class).arg(String.class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annot(requestParam()).arg(String.class); assertTrue(this.resolver.supportsParameter(param)); param = this.testMethod.annot(requestParam().notRequired()).arg(String.class); assertTrue(this.resolver.supportsParameter(param)); }
@Test public void resolveWithQueryString() { MethodParameter param = this.testMethod.annot(requestParam().notRequired("bar")).arg(String.class); MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/path?name=foo")); assertEquals("foo", resolve(param, exchange)); }
@Test // SPR-10180 public void resolveEmptyValueToDefault() { ServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/path?name=")); MethodParameter param = this.testMethod.annot(requestParam().notRequired("bar")).arg(String.class); Object result = resolve(param, exchange); assertEquals("bar", result); }
@Test public void resolveDefaultValue() { MethodParameter param = this.testMethod.annot(requestParam().notRequired("bar")).arg(String.class); assertEquals("bar", resolve(param, MockServerWebExchange.from(MockServerHttpRequest.get("/")))); }
@Test // SPR-17050 public void resolveAndConvertNullValue() { MethodParameter param = this.testMethod .annot(requestParam().notRequired()) .arg(Integer.class); assertNull(resolve(param, MockServerWebExchange.from(MockServerHttpRequest.get("/?nullParam=")))); }
@Test public void resolveString() throws Exception { String expected = "foo"; request.addParameter("name", expected); MethodParameter param = this.testMethod.annot(requestParam().notRequired("bar")).arg(String.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof String); assertEquals("Invalid result", expected, result); }
@Test @SuppressWarnings("unchecked") public void resolveMultiValueMapOfPart() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.setContentType("multipart/form-data"); Part expected1 = new MockPart("mfilelist", "Hello World 1".getBytes()); Part expected2 = new MockPart("mfilelist", "Hello World 2".getBytes()); Part expected3 = new MockPart("other", "Hello World 3".getBytes()); request.addPart(expected1); request.addPart(expected2); request.addPart(expected3); webRequest = new ServletWebRequest(request); MethodParameter param = this.testMethod.annot(requestParam().noName()).arg(MultiValueMap.class, String.class, Part.class); Object result = resolver.resolveArgument(param, null, webRequest, null); assertTrue(result instanceof MultiValueMap); MultiValueMap<String, Part> resultMap = (MultiValueMap<String, Part>) result; assertEquals(2, resultMap.size()); assertEquals(2, resultMap.get("mfilelist").size()); assertEquals(expected1, resultMap.get("mfilelist").get(0)); assertEquals(expected2, resultMap.get("mfilelist").get(1)); assertEquals(1, resultMap.get("other").size()); assertEquals(expected3, resultMap.get("other").get(0)); }
@Test public void supportsParameter() { MethodParameter param = this.testMethod.annot(requestParam().noName()).arg(Map.class, String.class, String.class); assertTrue(resolver.supportsParameter(param)); param = this.testMethod.annotPresent(RequestParam.class).arg(MultiValueMap.class, String.class, String.class); assertTrue(resolver.supportsParameter(param)); param = this.testMethod.annot(requestParam().name("name")).arg(Map.class, String.class, String.class); assertFalse(resolver.supportsParameter(param)); param = this.testMethod.annotNotPresent(RequestParam.class).arg(Map.class, String.class, String.class); assertFalse(resolver.supportsParameter(param)); }
@Test public void missingRequestParamEmptyValueNotRequired() throws Exception { WebDataBinder binder = new WebRequestDataBinder(null); binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); WebDataBinderFactory binderFactory = mock(WebDataBinderFactory.class); given(binderFactory.createBinder(webRequest, null, "name")).willReturn(binder); request.addParameter("name", ""); MethodParameter param = this.testMethod.annot(requestParam().notRequired()).arg(String.class); Object arg = resolver.resolveArgument(param, null, webRequest, binderFactory); assertNull(arg); }