我正在尝试上传一些具有大型JSON主体的文件,
以前(当没有文件上传时),我使用@RequestBody
for JSON,它会自动将我的请求解析为对象,就像下面这样。
@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)
}
我读到,你必须要么传递请求体或请求参数(在体),如果它是正确的是什么是这个替代方案?
您也可以将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转换为字节并将其作为请求参数添加到请求中。我没有测试代码,但我猜它应该是这样工作的。