spring @RequestBody中的Rest API Json有效负载与数据大小为3 MB的Json文件上载

4jb9z9bj  于 2022-11-21  发布在  Spring
关注(0)|答案(3)|浏览(161)

这也许是一个简单的问题,但我不能弄清楚它自己,也不能找到一个在线资源。
我必须使用spring Boot 开发一个REST API。我看到两个选项来接受json有效负载(在某些情况下最大有效负载大小为3 MB)

选项1:要求客户端在请求正文中发送json。让Jackson将其转换为Java对象

@RestController 
public class EmployeeController {
  
  @PostMapping
  public void createEmployees(@RequestBody List<Employee> employees) {
   // do something with employees 
  }

}

选项2:要求客户端上载json文件并让控制器接受Multipart有效负载

@RestController 
public class EmployeeController {

   @PostMapping(consumes = { MediaType.MULTIPART_FORM_DATA_VALUE })
  public void createEmployees(@RequestParam(name = "file") MultipartFile file) {
   // convert multipart file data to List of Employee objects
   //do something with employees 
  }

}

哪个选项更好?为什么?

7z5jn7bk

7z5jn7bk1#

我认为选项1更好。这是因为如果你使用一个文件,你必须读取写在文件中的json有效负载,并将其转换为List<Employee>
如果使用multipartFile,则会收到base64编码的数据。由于base64编码的数据将8位数据表示为6位数据,因此与原始数据相比,大小增加了33%。

atmip9wb

atmip9wb2#

如果我们讨论的是API直接使用的结构化数据,那么最好将其作为application/json上传。如果我们讨论的是某种附件,您的API可能不会触及或稍后才触及它,例如图像、PDF等,那么最好使用multipart/form-data并发送一个JSON,其中描述了附件的元数据,例如它是一个朋友的照片,所以我认为这取决于JSON和你想用它做什么。在你的情况下,因为它将被处理,那么最好以application/json的形式发送它。如果你稍后处理它,那么最好以这种方式发送它,并创建一个你可以跟踪处理状态的事务资源,类似于POST /transactions {json}

9nvpjoqh

9nvpjoqh3#

从这个RFC 2388开始,multipart/form-data媒体类型开始出现。
如此处所述
multipart/form-data编码具有较高的开销和性能
如果有许多字段具有短值
,则会产生影响。但是,在
实践中,对于使用中的表单,例如HTML,平均
开销并不显著。
因此,如果你只想发送一个普通的json,其中包含大量相对较小的字段,如整数、布尔值和小字符串,你应该考虑到它会严重影响你的开销和性能。

相关问题