首页 > 解决方案 > Spring 不会完整返回 JSON

问题描述

我正在使用 spring boot 和 @PostMapping 试图返回一个包含 1 个多部分文件和一些字符串的 POJO。当我查看 Postman 时,我只看到 Multipart 对象的一半。文件为 3kb。我没有收到任何错误。当我返回多部分变量 null 时,JSON 中的其他变量会在响应中显示,因此它们不为空。我怎样才能返回所有的 JSON?

public class foo{
    public MultipartFile dataFile;
    
    public String project;
    
    public Boolean extract;

    ... getter - setter - constructor
}

我像这样发送

@PostMapping
public foo route(@RequestParam("dataFile") MultipartFile dataFile, ... ) {

 ...
    return fooObject;
}

回复

{
    "dataFile": {
        "name": "dataFile",
        "bytes":"MIKCAQYJKoZIhvcNAQcCoIKB8jCCge4CA... (half of the file)

标签: javajsonspringspring-bootrest

解决方案


正如我所想,MultipartFile用于上传对象,而不是下载它。如Javadoc中所述:

在多部分请求中收到的上传文件的表示。

这意味着,它非常适合上传,但不适用于下载。

最简单的方法(也是最直接的)是将 a 更改MultipartFile为 abyte[]并将其发送给客户端。

这是一个例子:

public Foo getFile(MultipartFile multipartFile) {
    byte[] bytes = multipartFile.getBytes();
    return new Foo(bytes, "project");
}

推荐阅读