首页 > 解决方案 > 发送具有多个输入输入文件的大型 JSON

问题描述

我正在尝试上传一些带有大型 JSON Body 的文件,

以前(当没有文件上传时),我使用@RequestBody的是 JSON,它会自动将我的请求解析为 Object,如下所示。

@PostMapping("/TestEndPoint")
public void uploadData(@RequestBody MyClass jsonBody ) 
{

myService.uploadData(jsonBody)

}

但是现在由于我正在尝试实现上传功能,我发现文件和 JSON 可以通过发送,但正如这里@RequestParameter提到 的,在 @RequestParam 中发送大型 JSON 不是一个好主意,因为它会附加 URL。

这是我想要做的,

@PostMapping("/TestEndPoint")
public void uploadData(@RequestBody MyClass jsonBody , @RequestParam("file") MultipartFile file ) 
{

myService.uploadData(jsonBody)

}

我读过您必须传递请求正文或请求参数(在正文中),如果正确,有什么替代方法?

标签: javaspringspring-bootrestpostman

解决方案


您也可以将 JSON 作为请求参数发送,这应该非常简单。然后在控制器中手动将其转换为您的传输对象。

@PostMapping("/TestEndPoint")
public void uploadData(
    @RequestParam("file") MultipartFile file1, 
    @RequestParam("jsonFile") MultipartFile file2) throws IOException {

    String objString = new String(file2.getBytes());
    MyClass jsonBody = new ObjectMapper().readValue(objString, MyClass.class);        
    myService.uploadData(jsonBody);
}

发送请求的客户端只需将 JSON 转换为字节并将其作为请求参数添加到请求中。我没有测试过代码,但我猜它应该像这样工作。


推荐阅读