我正在尝试使用 Retrofit 2 发出 POST 请求。请求类型是 form-data
NOT application/x-www-form-urlencoded
。
我只发布数据而不是请求中的文件,响应是 JSON 的形式。
我试过 @FormUrlEncoded, @Multipart
但它不起作用。
我已经尝试了以下请求
1.第一次尝试
@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlanName(@Field(Constants.ACTION_ID) String actionId, @Field(Constants.OFFER_CODE) String offerCode);
<强>2。第二次尝试
@Headers({"Content-Type: multipart/form-data","Content-Type: text/plain"})
@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlans(@Body @FieldMap(encoded = false) Map<String, String> data);
3.第三次尝试
@Headers("Content-Type: multipart/form-data")
@Multipart
@POST("XXXX")
Call<PlanResponse> myPlans(@Part(Constants.ACTION_ID) String actionId, @Part(Constants.OFFER_CODE) String offerCode);
我只是将正文设为 null。它正在与 POSTMAN 合作。
我也搜索了 form-data
和 application/x-www-form-urlencoded
发现如果数据是二进制的,那么使用 form- data
如果数据是 ASCII 则使用 application/x-www-form-urlencoded
我正在尝试查找 Retrofit 不支持表单数据吗?
postman 请求
Cache-Control: no-cache
Postman-Token: XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX
Content-Type: multipart/form-data; boundary=---- WebKitFormBoundaryXXXXXXXXXXXX
----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="actionId"
1000
----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="offerCode"
MYCODE
----WebKitFormBoundaryXXXXXXXXXXXX
我只能添加从 POSTMAN 截取的 HTTP 生成代码
最佳答案
这是另一个使用请求正文的解决方案:
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("param1", param1)
.addFormDataPart("param2", param2)
.build();
apiInterface.somePostMethod(requestBody).enqueue(
//onResponse onFailure methods
);
这是我的 api 接口(interface) POST 方法
@POST("somePostMethod")
Call<ResponseBody> somePostMethod(@Body RequestBody body);
希望对你有帮助。
关于android - 仅使用表单数据进行改造 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814857/