【发布时间】:2022-02-25 20:24:56
【问题描述】:
我正在使用 OkHttp3 创建一个多部分的 RequestBody。以下是有效的 curl 请求。
curl --location --request POST 'https://<url>' --form 'object=@<file_path>' --form 'config={"access":"YES"};type=application/json'
删除;type=application/json,会在我们的 Spring Boot 服务器中产生错误。
不支持内容类型“application/octet-stream”。
所以很明显我应该为config 指定Json 类型。让我们使用 OkHttp 创建请求。
String mimeType = URLConnection.getFileNameMap().getContentTypeFor(file.getName());
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart(
"object", filename,
RequestBody.create(MediaType.parse(mimeType), file)
)
.addFormDataPart("config", "{\"access\":\"YES\"}") // CAN'T FIND A WORKING OPTION TO SPECIFY CONTENT TYPE HERE.
.build();
这产生了与上述相同的错误。于是我把代码改成如下。
.addPart(
Headers.of("Content-Type", "application/json"),
RequestBody.create(MediaType.parse("application/json"), "{\"access\":\"YES\"}")
)
现在 OkHttp 请求构建器会抛出此错误。
意外的标题:内容类型
使用空标头 Headers.of() 创建请求正文,但后来我意识到未指定表单数据键 config,来自此 API 错误。
所需的请求部分“配置”不存在
找了很多,但是没有找到OkHttp的解决方案,我在Spring RestTemplate等其他库中找到了解决方案。
【问题讨论】:
标签: java multipartform-data okhttp