[英]spring rest webservices return multipart/form-data with application/json content-type
[英]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 引導服務器產生錯誤。
不支持內容類型“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 請求生成器會拋出此錯誤。
意外的 header:內容類型
使用空的 header Headers.of()
創建請求正文,但后來我意識到未指定表單數據鍵config
,來自此 API 錯誤。
所需的請求部分“配置”不存在
我搜索了很多,但找不到任何使用 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\"}")
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.