簡體   English   中英

將表單數據部分中的 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 引導服務器產生錯誤。

不支持內容類型“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM