这也许是一个简单的问题,但我不能弄清楚它自己,也不能找到一个在线资源。
我必须使用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
}
}
哪个选项更好?为什么?
3条答案
按热度按时间7z5jn7bk1#
我认为选项1更好。这是因为如果你使用一个文件,你必须读取写在文件中的json有效负载,并将其转换为
List<Employee>
。如果使用multipartFile,则会收到base64编码的数据。由于base64编码的数据将8位数据表示为6位数据,因此与原始数据相比,大小增加了33%。
atmip9wb2#
如果我们讨论的是API直接使用的结构化数据,那么最好将其作为
application/json
上传。如果我们讨论的是某种附件,您的API可能不会触及或稍后才触及它,例如图像、PDF等,那么最好使用multipart/form-data
并发送一个JSON,其中描述了附件的元数据,例如它是一个朋友的照片,所以我认为这取决于JSON和你想用它做什么。在你的情况下,因为它将被处理,那么最好以application/json
的形式发送它。如果你稍后处理它,那么最好以这种方式发送它,并创建一个你可以跟踪处理状态的事务资源,类似于POST /transactions {json}
。9nvpjoqh3#
从这个RFC 2388开始,
multipart/form-data
媒体类型开始出现。如此处所述
multipart/form-data编码具有较高的开销和性能
如果有许多字段具有短值,则会产生影响。但是,在
实践中,对于使用中的表单,例如HTML,平均
开销并不显著。
因此,如果你只想发送一个普通的
json
,其中包含大量相对较小的字段,如整数、布尔值和小字符串,你应该考虑到它会严重影响你的开销和性能。