From 9b93508374ff3f99e4cd5fa1e21bc08bb3ae8db7 Mon Sep 17 00:00:00 2001 From: Johnny Lim Date: Wed, 15 Jun 2022 20:30:23 +0900 Subject: [PATCH 1/3] Add MockMvcRequestBuilders.multipart(HttpMethod, String, Object...) See gh-28545 Closes gh-28631 --- .../MockMultipartHttpServletRequestBuilder.java | 9 ++++++--- .../web/servlet/request/MockMvcRequestBuilders.java | 11 +++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java index 3f2b59909b..b6aa5cb0e3 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java @@ -64,7 +64,11 @@ public class MockMultipartHttpServletRequestBuilder extends MockHttpServletReque * @param uriVariables zero or more URI variables */ MockMultipartHttpServletRequestBuilder(String urlTemplate, Object... uriVariables) { - super(HttpMethod.POST, urlTemplate, uriVariables); + this(HttpMethod.POST, urlTemplate, uriVariables); + } + + MockMultipartHttpServletRequestBuilder(HttpMethod httpMethod, String urlTemplate, Object... uriVariables) { + super(httpMethod, urlTemplate, uriVariables); super.contentType(MediaType.MULTIPART_FORM_DATA); } @@ -74,8 +78,7 @@ public class MockMultipartHttpServletRequestBuilder extends MockHttpServletReque * @since 4.0.3 */ MockMultipartHttpServletRequestBuilder(URI uri) { - super(HttpMethod.POST, uri); - super.contentType(MediaType.MULTIPART_FORM_DATA); + this(HttpMethod.POST, uri); } /** diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java index 7334028daa..94d78b5b20 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java @@ -214,6 +214,17 @@ public abstract class MockMvcRequestBuilders { return new MockMultipartHttpServletRequestBuilder(urlTemplate, uriVars); } + /** + * Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request. + * @param httpMethod the HTTP method to use + * @param urlTemplate a URL template; the resulting URL will be encoded + * @param uriVars zero or more URI variables + * @since 5.3.22 + */ + public static MockMultipartHttpServletRequestBuilder multipart(HttpMethod httpMethod, String urlTemplate, Object... uriVars) { + return new MockMultipartHttpServletRequestBuilder(httpMethod, urlTemplate, uriVars); + } + /** * Variant of {@link #multipart(String, Object...)} with a {@link URI}. * @param uri the URL From e9806a96dccc99d29b27aa5c19ad315cc2535426 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Wed, 15 Jun 2022 15:02:22 +0200 Subject: [PATCH 2/3] Polish contribution and introduce test See gh-28631 --- ...ockMultipartHttpServletRequestBuilder.java | 5 ++++ .../request/MockMvcRequestBuilders.java | 6 ++-- .../standalone/MultipartControllerTests.java | 29 +++++++++++++++---- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java index b6aa5cb0e3..e176a798f6 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java @@ -67,6 +67,11 @@ public class MockMultipartHttpServletRequestBuilder extends MockHttpServletReque this(HttpMethod.POST, urlTemplate, uriVariables); } + /** + * Variant of {@link #MockMultipartHttpServletRequestBuilder(String, Object...)} + * that also accepts an {@link HttpMethod}. + * @since 5.3.22 + */ MockMultipartHttpServletRequestBuilder(HttpMethod httpMethod, String urlTemplate, Object... uriVariables) { super(httpMethod, urlTemplate, uriVariables); super.contentType(MediaType.MULTIPART_FORM_DATA); diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java index 94d78b5b20..bb8356a306 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java @@ -205,7 +205,8 @@ public abstract class MockMvcRequestBuilders { } /** - * Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request. + * Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request, + * using POST as the HTTP method. * @param urlTemplate a URL template; the resulting URL will be encoded * @param uriVars zero or more URI variables * @since 5.0 @@ -215,7 +216,8 @@ public abstract class MockMvcRequestBuilders { } /** - * Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request. + * Variant of {@link #multipart(String, Object...)} that also accepts an + * {@link HttpMethod}. * @param httpMethod the HTTP method to use * @param urlTemplate a URL template; the resulting URL will be encoded * @param uriVars zero or more URI variables diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java index f525ac7971..03495b20b2 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java @@ -35,6 +35,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.http.HttpMethod; import org.springframework.mock.web.MockMultipartFile; import org.springframework.mock.web.MockPart; import org.springframework.stereotype.Controller; @@ -45,6 +46,7 @@ import org.springframework.util.StreamUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.filter.OncePerRequestFilter; @@ -61,20 +63,30 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standal * @author Rossen Stoyanchev * @author Juergen Hoeller * @author Jaebin Joo + * @author Sam Brannen */ public class MultipartControllerTests { @ParameterizedTest - @ValueSource(strings = {"/multipartfile", "/part"}) - public void multipartRequestWithSingleFileOrPart(String url) throws Exception { + @ValueSource(strings = {"/multipartfile", "/multipartfile-via-put", "/part"}) + void multipartRequestWithSingleFileOrPart(String url) throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); - MockMultipartHttpServletRequestBuilder requestBuilder = (url.endsWith("file") ? - multipart(url).file(new MockMultipartFile("file", "orig", null, fileContent)) : - multipart(url).part(new MockPart("part", "orig", fileContent))); + MockMultipartHttpServletRequestBuilder requestBuilder; + switch (url) { + case "/multipartfile": + requestBuilder = multipart(url).file(new MockMultipartFile("file", "orig", null, fileContent)); + break; + case "/multipartfile-via-put": + requestBuilder = multipart(HttpMethod.PUT, url).file(new MockMultipartFile("file", "orig", null, fileContent)); + break; + default: + requestBuilder = multipart(url).part(new MockPart("part", "orig", fileContent)); + break; + } standaloneSetup(new MultipartController()).build() .perform(requestBuilder.file(jsonPart)) @@ -275,6 +287,13 @@ public class MultipartControllerTests { } @RequestMapping(value = "/multipartfilearray", method = RequestMethod.POST) + @PutMapping("/multipartfile-via-put") + public String processMultipartFileViaHttpPut(@RequestParam(required = false) MultipartFile file, + @RequestPart(required = false) Map json, Model model) throws IOException { + + return processMultipartFile(file, json, model); + } + public String processMultipartFileArray(@RequestParam(required = false) MultipartFile[] file, @RequestPart(required = false) Map json, Model model) throws IOException { From fb1fa073a65e32a18ba534cae49a832336490105 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Wed, 15 Jun 2022 15:03:55 +0200 Subject: [PATCH 3/3] Polishing --- .../request/MockMvcRequestBuilders.java | 66 +++++++++---------- .../standalone/MultipartControllerTests.java | 53 ++++++++------- 2 files changed, 59 insertions(+), 60 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java index bb8356a306..dba4d4d61c 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMvcRequestBuilders.java @@ -50,10 +50,10 @@ public abstract class MockMvcRequestBuilders { /** * Create a {@link MockHttpServletRequestBuilder} for a GET request. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables */ - public static MockHttpServletRequestBuilder get(String urlTemplate, Object... uriVars) { - return new MockHttpServletRequestBuilder(HttpMethod.GET, urlTemplate, uriVars); + public static MockHttpServletRequestBuilder get(String urlTemplate, Object... uriVariables) { + return new MockHttpServletRequestBuilder(HttpMethod.GET, urlTemplate, uriVariables); } /** @@ -68,10 +68,10 @@ public abstract class MockMvcRequestBuilders { /** * Create a {@link MockHttpServletRequestBuilder} for a POST request. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables */ - public static MockHttpServletRequestBuilder post(String urlTemplate, Object... uriVars) { - return new MockHttpServletRequestBuilder(HttpMethod.POST, urlTemplate, uriVars); + public static MockHttpServletRequestBuilder post(String urlTemplate, Object... uriVariables) { + return new MockHttpServletRequestBuilder(HttpMethod.POST, urlTemplate, uriVariables); } /** @@ -86,10 +86,10 @@ public abstract class MockMvcRequestBuilders { /** * Create a {@link MockHttpServletRequestBuilder} for a PUT request. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables */ - public static MockHttpServletRequestBuilder put(String urlTemplate, Object... uriVars) { - return new MockHttpServletRequestBuilder(HttpMethod.PUT, urlTemplate, uriVars); + public static MockHttpServletRequestBuilder put(String urlTemplate, Object... uriVariables) { + return new MockHttpServletRequestBuilder(HttpMethod.PUT, urlTemplate, uriVariables); } /** @@ -104,10 +104,10 @@ public abstract class MockMvcRequestBuilders { /** * Create a {@link MockHttpServletRequestBuilder} for a PATCH request. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables */ - public static MockHttpServletRequestBuilder patch(String urlTemplate, Object... uriVars) { - return new MockHttpServletRequestBuilder(HttpMethod.PATCH, urlTemplate, uriVars); + public static MockHttpServletRequestBuilder patch(String urlTemplate, Object... uriVariables) { + return new MockHttpServletRequestBuilder(HttpMethod.PATCH, urlTemplate, uriVariables); } /** @@ -122,10 +122,10 @@ public abstract class MockMvcRequestBuilders { /** * Create a {@link MockHttpServletRequestBuilder} for a DELETE request. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables */ - public static MockHttpServletRequestBuilder delete(String urlTemplate, Object... uriVars) { - return new MockHttpServletRequestBuilder(HttpMethod.DELETE, urlTemplate, uriVars); + public static MockHttpServletRequestBuilder delete(String urlTemplate, Object... uriVariables) { + return new MockHttpServletRequestBuilder(HttpMethod.DELETE, urlTemplate, uriVariables); } /** @@ -140,10 +140,10 @@ public abstract class MockMvcRequestBuilders { /** * Create a {@link MockHttpServletRequestBuilder} for an OPTIONS request. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables */ - public static MockHttpServletRequestBuilder options(String urlTemplate, Object... uriVars) { - return new MockHttpServletRequestBuilder(HttpMethod.OPTIONS, urlTemplate, uriVars); + public static MockHttpServletRequestBuilder options(String urlTemplate, Object... uriVariables) { + return new MockHttpServletRequestBuilder(HttpMethod.OPTIONS, urlTemplate, uriVariables); } /** @@ -158,11 +158,11 @@ public abstract class MockMvcRequestBuilders { /** * Create a {@link MockHttpServletRequestBuilder} for a HEAD request. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables * @since 4.1 */ - public static MockHttpServletRequestBuilder head(String urlTemplate, Object... uriVars) { - return new MockHttpServletRequestBuilder(HttpMethod.HEAD, urlTemplate, uriVars); + public static MockHttpServletRequestBuilder head(String urlTemplate, Object... uriVariables) { + return new MockHttpServletRequestBuilder(HttpMethod.HEAD, urlTemplate, uriVariables); } /** @@ -178,10 +178,10 @@ public abstract class MockMvcRequestBuilders { * Create a {@link MockHttpServletRequestBuilder} for a request with the given HTTP method. * @param method the HTTP method (GET, POST, etc) * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables */ - public static MockHttpServletRequestBuilder request(HttpMethod method, String urlTemplate, Object... uriVars) { - return new MockHttpServletRequestBuilder(method, urlTemplate, uriVars); + public static MockHttpServletRequestBuilder request(HttpMethod method, String urlTemplate, Object... uriVariables) { + return new MockHttpServletRequestBuilder(method, urlTemplate, uriVariables); } /** @@ -208,11 +208,11 @@ public abstract class MockMvcRequestBuilders { * Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request, * using POST as the HTTP method. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables * @since 5.0 */ - public static MockMultipartHttpServletRequestBuilder multipart(String urlTemplate, Object... uriVars) { - return new MockMultipartHttpServletRequestBuilder(urlTemplate, uriVars); + public static MockMultipartHttpServletRequestBuilder multipart(String urlTemplate, Object... uriVariables) { + return new MockMultipartHttpServletRequestBuilder(urlTemplate, uriVariables); } /** @@ -220,11 +220,11 @@ public abstract class MockMvcRequestBuilders { * {@link HttpMethod}. * @param httpMethod the HTTP method to use * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables * @since 5.3.22 */ - public static MockMultipartHttpServletRequestBuilder multipart(HttpMethod httpMethod, String urlTemplate, Object... uriVars) { - return new MockMultipartHttpServletRequestBuilder(httpMethod, urlTemplate, uriVars); + public static MockMultipartHttpServletRequestBuilder multipart(HttpMethod httpMethod, String urlTemplate, Object... uriVariables) { + return new MockMultipartHttpServletRequestBuilder(httpMethod, urlTemplate, uriVariables); } /** @@ -250,12 +250,12 @@ public abstract class MockMvcRequestBuilders { /** * Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request. * @param urlTemplate a URL template; the resulting URL will be encoded - * @param uriVars zero or more URI variables + * @param uriVariables zero or more URI variables * @deprecated in favor of {@link #multipart(String, Object...)} */ @Deprecated - public static MockMultipartHttpServletRequestBuilder fileUpload(String urlTemplate, Object... uriVars) { - return new MockMultipartHttpServletRequestBuilder(urlTemplate, uriVars); + public static MockMultipartHttpServletRequestBuilder fileUpload(String urlTemplate, Object... uriVariables) { + return new MockMultipartHttpServletRequestBuilder(urlTemplate, uriVariables); } /** diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java index 03495b20b2..e81b93388a 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/MultipartControllerTests.java @@ -44,8 +44,7 @@ import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequ import org.springframework.ui.Model; import org.springframework.util.StreamUtils; import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; @@ -65,7 +64,7 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standal * @author Jaebin Joo * @author Sam Brannen */ -public class MultipartControllerTests { +class MultipartControllerTests { @ParameterizedTest @ValueSource(strings = {"/multipartfile", "/multipartfile-via-put", "/part"}) @@ -96,14 +95,14 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithSingleFileNotPresent() throws Exception { + void multipartRequestWithSingleFileNotPresent() throws Exception { standaloneSetup(new MultipartController()).build() .perform(multipart("/multipartfile")) .andExpect(status().isFound()); } @Test - public void multipartRequestWithFileArray() throws Exception { + void multipartRequestWithFileArray() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart1 = new MockMultipartFile("file", "orig", null, fileContent); MockMultipartFile filePart2 = new MockMultipartFile("file", "orig", null, fileContent); @@ -119,21 +118,21 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithFileArrayNotPresent() throws Exception { + void multipartRequestWithFileArrayNotPresent() throws Exception { standaloneSetup(new MultipartController()).build() .perform(multipart("/multipartfilearray")) .andExpect(status().isFound()); } @Test - public void multipartRequestWithFileArrayNoMultipart() throws Exception { + void multipartRequestWithFileArrayNoMultipart() throws Exception { standaloneSetup(new MultipartController()).build() .perform(post("/multipartfilearray")) .andExpect(status().isFound()); } @Test - public void multipartRequestWithFileList() throws Exception { + void multipartRequestWithFileList() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart1 = new MockMultipartFile("file", "orig", null, fileContent); MockMultipartFile filePart2 = new MockMultipartFile("file", "orig", null, fileContent); @@ -149,21 +148,21 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithFileListNotPresent() throws Exception { + void multipartRequestWithFileListNotPresent() throws Exception { standaloneSetup(new MultipartController()).build() .perform(multipart("/multipartfilelist")) .andExpect(status().isFound()); } @Test - public void multipartRequestWithFileListNoMultipart() throws Exception { + void multipartRequestWithFileListNoMultipart() throws Exception { standaloneSetup(new MultipartController()).build() .perform(post("/multipartfilelist")) .andExpect(status().isFound()); } @Test - public void multipartRequestWithOptionalFile() throws Exception { + void multipartRequestWithOptionalFile() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart = new MockMultipartFile("file", "orig", null, fileContent); @@ -178,7 +177,7 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithOptionalFileNotPresent() throws Exception { + void multipartRequestWithOptionalFileNotPresent() throws Exception { byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); @@ -190,7 +189,7 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithOptionalFileArray() throws Exception { + void multipartRequestWithOptionalFileArray() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart1 = new MockMultipartFile("file", "orig", null, fileContent); MockMultipartFile filePart2 = new MockMultipartFile("file", "orig", null, fileContent); @@ -206,7 +205,7 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithOptionalFileArrayNotPresent() throws Exception { + void multipartRequestWithOptionalFileArrayNotPresent() throws Exception { byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); @@ -218,7 +217,7 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithOptionalFileList() throws Exception { + void multipartRequestWithOptionalFileList() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart1 = new MockMultipartFile("file", "orig", null, fileContent); MockMultipartFile filePart2 = new MockMultipartFile("file", "orig", null, fileContent); @@ -234,7 +233,7 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithOptionalFileListNotPresent() throws Exception { + void multipartRequestWithOptionalFileListNotPresent() throws Exception { byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); @@ -246,7 +245,7 @@ public class MultipartControllerTests { } @Test - public void multipartRequestWithDataBindingToFile() throws Exception { + void multipartRequestWithDataBindingToFile() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockPart filePart = new MockPart("file", "orig", fileContent); @@ -257,7 +256,7 @@ public class MultipartControllerTests { } @Test // SPR-13317 - public void multipartRequestWrapped() throws Exception { + void multipartRequestWrapped() throws Exception { byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); @@ -272,7 +271,7 @@ public class MultipartControllerTests { @Controller private static class MultipartController { - @RequestMapping(value = "/multipartfile", method = RequestMethod.POST) + @PostMapping("/multipartfile") public String processMultipartFile(@RequestParam(required = false) MultipartFile file, @RequestPart(required = false) Map json, Model model) throws IOException { @@ -286,7 +285,6 @@ public class MultipartControllerTests { return "redirect:/index"; } - @RequestMapping(value = "/multipartfilearray", method = RequestMethod.POST) @PutMapping("/multipartfile-via-put") public String processMultipartFileViaHttpPut(@RequestParam(required = false) MultipartFile file, @RequestPart(required = false) Map json, Model model) throws IOException { @@ -294,6 +292,7 @@ public class MultipartControllerTests { return processMultipartFile(file, json, model); } + @PostMapping("/multipartfilearray") public String processMultipartFileArray(@RequestParam(required = false) MultipartFile[] file, @RequestPart(required = false) Map json, Model model) throws IOException { @@ -309,7 +308,7 @@ public class MultipartControllerTests { return "redirect:/index"; } - @RequestMapping(value = "/multipartfilelist", method = RequestMethod.POST) + @PostMapping("/multipartfilelist") public String processMultipartFileList(@RequestParam(required = false) List file, @RequestPart(required = false) Map json, Model model) throws IOException { @@ -325,7 +324,7 @@ public class MultipartControllerTests { return "redirect:/index"; } - @RequestMapping(value = "/optionalfile", method = RequestMethod.POST) + @PostMapping("/optionalfile") public String processOptionalFile(@RequestParam Optional file, @RequestPart Map json, Model model) throws IOException { @@ -337,7 +336,7 @@ public class MultipartControllerTests { return "redirect:/index"; } - @RequestMapping(value = "/optionalfilearray", method = RequestMethod.POST) + @PostMapping("/optionalfilearray") public String processOptionalFileArray(@RequestParam Optional file, @RequestPart Map json, Model model) throws IOException { @@ -351,7 +350,7 @@ public class MultipartControllerTests { return "redirect:/index"; } - @RequestMapping(value = "/optionalfilelist", method = RequestMethod.POST) + @PostMapping("/optionalfilelist") public String processOptionalFileList(@RequestParam Optional> file, @RequestPart Map json, Model model) throws IOException { @@ -365,7 +364,7 @@ public class MultipartControllerTests { return "redirect:/index"; } - @RequestMapping(value = "/part", method = RequestMethod.POST) + @PostMapping("/part") public String processPart(@RequestPart Part part, @RequestPart Map json, Model model) throws IOException { @@ -378,13 +377,13 @@ public class MultipartControllerTests { return "redirect:/index"; } - @RequestMapping(value = "/json", method = RequestMethod.POST) + @PostMapping("/json") public String processMultipart(@RequestPart Map json, Model model) { model.addAttribute("json", json); return "redirect:/index"; } - @RequestMapping(value = "/multipartfilebinding", method = RequestMethod.POST) + @PostMapping("/multipartfilebinding") public String processMultipartFileBean( MultipartFileBean multipartFileBean, Model model, BindingResult bindingResult) throws IOException {