json - 在 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, 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);
}
}
如果我像这样在 Postman 中指定 Json 有效负载,这似乎有效(请注意,我必须将内容类型指定为 application/json,否则我会收到消息“'application/octet-stream' not supported”
但是如果没有发送 json 部分,我会得到 403。我希望选项集合为空或 null。换句话说,我希望它默认为 {}
我试过 RequestPart 和 RequestParam,但没有区别。我也尝试过使用和不使用 @Valid 注释
我怎样才能做到这一点?
更新:我认为我发现我的问题与 Spring 的关系不如我试图对@JsonAnyGetter
and@JsonAnySetter
注释做的事情。如果我将 FileOperationFileContract 更改为具有常规字段,它就可以工作。但我的猜测是,我拥有它的方式不适用于 null。尽管如果值为 null,则不应调用setOptions
. 有任何想法吗?
解决方案
推荐阅读
- python - numpy中索引的逆运算是什么?
- python - Pandas - 仅使用日期时间列计算月份和年份
- php - 如何使用独白 ElasticSearchHandler 登录 Laravel 应用程序
- python - python:比较N个数据帧的相等性
- r - 在 R 中创建一个新的数据框并重新排列
- r - 如何显示使用 patchwork 包制作的 ggplots 数组的标签?
- c# - 从字典中删除口袋妖怪
- python - Python Pandas 比较 2 列
- rest - REST 服务和安全/身份验证不是对立的吗?
- visual-studio-code - 在 vscode 中使用正则表达式查找和替换具有不同名称的标签