我正在使用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。
在使用了这段代码之后,我找到了一种指定内容类型的方法。
.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\"}")
)
问题内容: 嗨,大家好,我是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