From 632324d94b4cc8ef0e5256a47455efe6d5e0a1fb Mon Sep 17 00:00:00 2001 From: Rikako Wu <496063163@qq.com> Date: Wed, 30 Nov 2022 23:51:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=B8=B8=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring/Spring core/SpringMVC.md | 39 +++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/spring/Spring core/SpringMVC.md b/spring/Spring core/SpringMVC.md index a1897ed..c06042c 100644 --- a/spring/Spring core/SpringMVC.md +++ b/spring/Spring core/SpringMVC.md @@ -356,8 +356,43 @@ public String handle(@SessionAttribute User user) { } ``` #### Multipart -在MultipartResolver被启用之后, - +在MultipartResolver被启用之后,Post请求体中为multipart/form-data格式的数据将被转化并可以作为handler method的参数访问。如下显示了文件上传的用法: +```java +@Controller +public class FileUploadController { + + @PostMapping("/form") + public String handleFormUpload(@RequestParam("name") String name, + @RequestParam("file") MultipartFile file) { + + if (!file.isEmpty()) { + byte[] bytes = file.getBytes(); + // store the bytes somewhere + return "redirect:uploadSuccess"; + } + return "redirect:uploadFailure"; + } +} +``` +> 在上述代码中,可以将MultipartFile改为List\来解析多个文件名 +> **当@RequestParam没有指定name属性并且参数类型为Map或MultiValueMap类型时,会根据name自动将所有匹配的MultipartFile注入到map中** + +#### @RequestBody +可以通过@RequestBody注解读取请求体内容,并且通过HttpMessageConverter将内容反序列化为Object。具体使用方法如下: +```java +@PostMapping("/accounts") +public void handle(@RequestBody Account account) { + // ... +} +``` +#### HttpEntity +将参数类型指定为HttpEntity与使用@RequestBody注解类似,其作为一个容器包含了请求体转化后的对象(account实例)和请求头(HttpHeaders)。其使用如下: +```java +@PostMapping("/accounts") +public void handle(HttpEntity entity) { + // ... +} +```