问题描述
我试图弄清楚如何将一组可选参数以及一个多部分文件传递给 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’”
>但如果没有发送 json 部分,我会收到 403。我希望选项集合为空或为空。换句话说,我希望它默认为 {}
我尝试过 RequestPart 和 RequestParam,但没有区别。我也试过有和没有@Valid 注释
我该怎么做?
更新:我想我发现我的问题与 Spring 的关系不像我试图用 @JsonAnyGetter
和 @JsonAnySetter
注释所做的那样多。如果我将 FileOperationFileContract 更改为具有常规字段,则它可以工作。但我的猜测是,我拥有它的方式在 null 下效果不佳。尽管如果值为 null,则不应调用 setOptions
。有什么想法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)