android - 仅使用表单数据进行改造 2

标签 android retrofit2 form-data

我正在尝试使用 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-dataapplication/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/

相关文章:

java.lang.RuntimeException : Unable to start activity ComponentInfo for register and login 错误

android - 如何使用 IF 检查 TextView 可见性

javascript - 在 formdata 中 append 创建的图像文件

javascript - FormData.append ("key", "value") 不工作

android - 在 Android 中的布局中屏蔽图像

android - 如何在抽屉导航中放置项目图标

android - 应用程序在 java.net.SocketTimeoutException : timeout (Kotlin, Retrofit 上崩溃

android - Web API 2 无法读取通过 Retrofit 2 发送的 byte[]

android - Kotlin 协程和 SecurityException

jquery - 使用查询上传多张照片