当前位置: 首页 > 知识库问答 >
问题:

将表单数据部分中的Content-Type指定为Application/json

步博厚
2023-03-14

我正在使用OkHttp3创建一个多部分请求体。以下是工作curl请求。

curl --location --request POST 'https://<url>' --form 'object=@<file_path>' --form 'config={"access":"YES"};type=application/json'

删除; type=apps/json,会从我们的Spring Boot服务器产生错误。

不支持内容类型“应用程序/八位字节流”。

所以很明显,我应该为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请求生成器抛出了这个错误。

意外标头:Content-Type

使用空标头Headers.of(),创建请求正文,但后来我意识到表单数据键config没有指定,来自这个API错误。

所需的请求部分“配置”不存在

我搜索了很多,但找不到OkHttp的任何解决方案,我在其他库中找到了解决方案,例如Spring RestTemboard。

共有2个答案

宋凌龙
2023-03-14

在使用了这段代码之后,我找到了一种指定内容类型的方法。

.addPart(
    Headers.of("Content-Disposition", "form-data; name=\"config\""),
    RequestBody.create(MediaType.parse("application/json"), "{\"access\":\"YES\"}")
)
笪烨
2023-03-14

这可能也行。

.addFormDataPart(
    "config",
    null,
    RequestBody.create(MediaType.parse("application/json"), "{\"access\":\"YES\"}")
)
 类似资料:
  • 问题内容: 嗨,大家好,我是AngularJS的新手,我需要您的帮助。 我需要做的就是将json发布到API并获得正确的响应。 这是我不知道在哪里编写此代码的JSON。 JSON格式 如果我做的正确,则不确定。 控制器 服务.JS INDEX.HTML 希望你能帮助我。 我不断收到诸如“不受支持的媒体类型”之类的回复…我不知道该怎么办… 任何建议或评论都将很棒。。谢谢! 问题答案: 在Angula

  • 我已经开发了Spring boot(V1.5.2)rest api,并使用spring-boot-starter-undertow嵌入式服务器来运行应用程序。其中一个操作具有上传文件特性(方法=RequestMethod.Post,消耗=MediaType.Multipart_Form_Data_Value)。 在使用postman测试自动生成的头(如Content-Type、Content-Le

  • 我试图在PHP中使用multipart/form-data头发布一个带有cURL的图像,因为我发送到的API期望图像以多部分形式发送。 我没有问题与API与其他请求;只有张贴图像是一个问题。 我在客户端使用此表单: 请求头中的content-type现在显示正确了。但是图像似乎没有像API所期望的那样正确地发送。不幸的是,我无法访问API... 感谢您的帮助,谢谢

  • 我尝试用angular发送post请求,但是当我将content-type设置为application/json时,请求的content-type总是没有设置,HTTP方法总是被删除,所有发布的数据都从请求体中删除。这里是我的代码 这里是我的请求

  • 问题内容: 我的下面的代码 错误:{“错误”:“内容类型标头[应用程序/ x-www-form-urlencoded]不支持ed”,“状态”:406} 问题答案: 您需要像这样指定content-type标头

  • Content-Type实体头用于指示所述媒体类型的资源的。 作为响应,Content-Type标题告诉客户实际返回的内容的内容类型。浏览器在某些情况下会执行 MIME 嗅探,并不一定会遵循此标头的值; 为了防止这种行为,X-Content-Type-Options可以将标题设置为nosniff。 在请求(例如POST或PUT)中,客户端通知服务器实际发送了什么类型的数据。 Header type