在 SpringBoot 中发送 Json 和多部分文件

问题描述

我试图弄清楚如何将一组可选参数以及一个多部分文件传递给 SpringBoot 控制器,但不知道如何进行。

没有多部分文件,这工作正常

public ResponseEntity<ViewModel> performOperationOnFilePath(@Valid @RequestBody final FileOperationFileContract requestBody) 

其中 FileOperationFileContract 是一个看起来像这样的 POJO

public class FileOperationFileContract {
    @NotBlank(message = "The filepath is required")
    private String filePath;

    private Map<String,String> options = new HashMap<>();

    @JsonAnyGetter
    public Map<String,String> getOptions() {
        return options;
    }

    @JsonAnySetter
    public void setOptions(final String name,final String value) {
        options.put(name,value);
    }
}

这是我对多部分文件的尝试

public ResponseEntity<ViewModel> performOperationOnFile(@RequestParam(name="myfile") final MultipartFile file,@RequestPart(name="options",required=false) final FileOperationMultipartFileContract requestBody)

其中 FileOperationMultipartFileContract 是一个看起来像这样的 POJO

public class FileOperationMultipartFileContract {
    private Map<String,value);
    }
}

如果我像这样在 Postman 中指定 Json 有效负载,这似乎有效(请注意,我必须将内容类型指定为 application/json,否则我会收到消息“不支持‘application/octet-stream’”

>

enter image description here

但如果没有发送 json 部分,我会收到 403。我希望选项集合为空或为空。换句话说,我希望它默认为 {}

我尝试过 RequestPart 和 RequestParam,但没有区别。我也试过有和没有@Valid 注释

我该怎么做?

更新:我想我发现我的问题与 Spring 的关系不像我试图用 @JsonAnyGetter@JsonAnySetter 注释所做的那样多。如果我将 FileOperationFileContract 更改为具有常规字段,则它可以工作。但我的猜测是,我拥有它的方式在 null 下效果不佳。尽管如果值为 null,则不应调用 setOptions。有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)