将 form-data 部分中的 Content-Type 指定为 application/json
Specify Content-Type in form-data part as application/json
我正在使用 OkHttp3 创建一个多部分 RequestBody。以下是有效的 curl 请求。
curl --location --request POST 'https://<url>' --form 'object=@<file_path>' --form 'config={"access":"YES"};type=application/json'
删除 ;type=application/json
,从我们的 Spring 启动服务器中产生错误。
Content type 'application/octet-stream' not supported.
所以很明显我应该为 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 请求构建器抛出这个错误。
Unexpected header: Content-Type
使用空 header Headers.of()
,创建请求 body,但后来我意识到 form-data 键 config
未指定,从此API 错误。
Required request part 'config' is not present
我搜索了很多,但找不到任何关于 OkHttp 的解决方案,我在其他库中找到了解决方案,例如 Spring RestTemplate。
玩完这段代码后,我找到了一种方法来指定 Content-Type。
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"config\""),
RequestBody.create(MediaType.parse("application/json"), "{\"access\":\"YES\"}")
)
这可能也行。
.addFormDataPart(
"config",
null,
RequestBody.create(MediaType.parse("application/json"), "{\"access\":\"YES\"}")
)
我正在使用 OkHttp3 创建一个多部分 RequestBody。以下是有效的 curl 请求。
curl --location --request POST 'https://<url>' --form 'object=@<file_path>' --form 'config={"access":"YES"};type=application/json'
删除 ;type=application/json
,从我们的 Spring 启动服务器中产生错误。
Content type 'application/octet-stream' not supported.
所以很明显我应该为 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 请求构建器抛出这个错误。
Unexpected header: Content-Type
使用空 header Headers.of()
,创建请求 body,但后来我意识到 form-data 键 config
未指定,从此API 错误。
Required request part 'config' is not present
我搜索了很多,但找不到任何关于 OkHttp 的解决方案,我在其他库中找到了解决方案,例如 Spring RestTemplate。
玩完这段代码后,我找到了一种方法来指定 Content-Type。
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"config\""),
RequestBody.create(MediaType.parse("application/json"), "{\"access\":\"YES\"}")
)
这可能也行。
.addFormDataPart(
"config",
null,
RequestBody.create(MediaType.parse("application/json"), "{\"access\":\"YES\"}")
)