使用@RequestPart同时接收表单数据和MultipartFile数据

项目中有使用restTemplate转发表单数据和上传文件,之前都是将表单数据json传到后台进行序列化,这样一来代码就显得十分不美观,后来发现使用@RequestPart注解可直接进行数据绑定,十分优雅地解决了这个问题。


客户端代码:

public void save(FormData formData, MultipartFile[] applyFiles) {
        MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
        multiValueMap.add("formData", formData);
        List<Resource> tmpResource = new ArrayList<>();
        for (MultipartFile multipartFile : applyFiles) {
            if (multipartFile != null) {
                tmpResource.add(multipartFile.getResource());
            }
        }
        multiValueMap.addAll("applyFile", tmpResource);
        restTemplate.postForObject("localhost:8080/demo/matter/save", multiValueMap, Void.class);
}

服务端代码:

@PostMapping("/save")
    public void save(@RequestPart(required = false) FormData formData,
                     @RequestParam(value="applyFile", required=false) MultipartFile[] applyFiles) {
    。。。
}

 

### 使用 `@RequestPart` 注解接收二维数组文件 当涉及到 Spring Boot 中处理复杂的 HTTP 请求,特别是带有文件上传的情况时,`@RequestPart` 是一种有效的方式。对于接收二维数组形式的文件上传,可以通过创建一个封装类来表示这种结构。 #### 封装实体类 为了更好地管理映射前端发送的数据到后端模型中,建议先定义好相应的 Java Bean 或者 DTO (Data Transfer Object),用于承载这些文件及其元数据。例如: ```java @Data @AllArgsConstructor @NoArgsConstructor public class FileUploadDTO { private List<List<MultipartFile>> files; } ``` 此代码片段展示了如何构建一个简单的传输对象来保存嵌套列表中的多个 MultipartFile 实例[^1]。 #### 控制器方法实现 接下来是在控制器层编写具体的方法逻辑以处理来自客户端提交的内容。这里假设使用的是 POST 方法,并且表单编码类型设置为 multipart/form-data: ```java @PostMapping("/uploadFiles") public ResponseEntity<String> handleFileUpload(@RequestPart("files") FileUploadDTO fileUploadDto){ try{ // 对接收到的文件进行操作... return new ResponseEntity<>("Successfully uploaded", HttpStatus.OK); }catch(Exception e){ return new ResponseEntity<>(e.getMessage(), HttpStatus.EXPECTATION_FAILED); } } ``` 上述例子说明了怎样利用 `@RequestPart` 来绑定名为 "files" 的部分至自定义的对象上。注意这里的 key ("files") 应该匹配从前端发出请求时所使用的字段名称[^3]。 另外需要注意的是,在实际应用过程中可能还需要考虑诸如安全性验证、异常捕获等其他方面的问题;同时也要确保前后端之间关于参数命名的一致性以及正确的 MIME 类型配置等问题[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值