【问题标题】:Problem with working with Multipart form data Retrofit2使用多部分表单数据 Retrofit2 的问题
【发布时间】:2020-05-18 23:22:27
【问题描述】:

我知道使用 multipart 进行简单的文本身份验证是不明智的。但我需要将它与提供给我的 api 一起使用。 我尝试了所有可能的方法。

邮递员工作得很好 但不是改造 2

request type details

request type details

使用的代码 试过了

    //RequestBody requestNameRq = RequestBody.create(MediaType.parse("text/plain"),serviceNameValue);
    //RequestBody requestAmountRq = RequestBody.create(MediaType.parse("text/plain"),serviceAmountValue.toString());

/* Create Request Body */
//MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM)
//        .addFormDataPart("service",serviceNameValue)
//        .addFormDataPart("amount", String.valueOf(serviceAmountValue));


//RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
//        .addFormDataPart("service",serviceNameValue)
//        .addFormDataPart("amount",serviceAmountValue.toString()).build();

//MultipartBody.Part  multipartRequestBody = MultipartBody.Part
//        .createFormData("service",serviceNameValue)
//        .createFormData("amount",serviceAmountValue.toString());



//MultipartBody multipartBody = builder.build();

API 服务代码

       @POST("services")
        Call<AddServiceResponse> addService(@Header("Authorization") String authToken,
                                            //@Body MultipartBody body);
                                            @Part("service") RequestBody service,
                                            @Part("amount") RequestBody amount);
                                            //@Part("service") String service,
                                            //@Part("amount") String password);
                                            //@Part("service") RequestBody service,
                                            //@Part("amount") RequestBody amount);
}

【问题讨论】:

  • 你有没有用@Multipart注解你的api方法?
  • 是的,我用过@Multipart
  • 只是一个建议:你知道 PostMan 在右上角有一个选项Code,当你点击它时,你可以找到任何特定编程语言请求该 API 的代码。只需使用它并尝试比较您的请求代码。在大多数情况下,它有助于解决问题。
  • @RakshithMR 1. 你是什么意思不使用改造:也许你有错误堆栈或至少有状态码或其他东西?请将此信息添加到您的问题 2。还请在您准备参数并调用 addService 方法的位置添加代码
  • @art 其他请求工作正常。我得到一个 html 页面作为响应如果我请求 Json 类型它显示未经授权的错误正文,但它与邮递员一起工作正常。

标签: android retrofit2 multipartform-data multipart retrofit2.6


【解决方案1】:

修改你的 ApiService 类

@Multipart
@POST("services")
        Call<AddServiceResponse> addService(
                                       @Header("Authorization") String authToken,
                                       @Part("service") MultipartBody.Part service,
                                       @Part("amount") MultipartBody.Part amount);

然后创建MultipartBody

MultipartBody.Part serviceBody = MultipartBody.Part.createFormData("service", "Somethin2");
MultipartBody.Part amountBody = MultipartBody.Part.createFormData("amount", "2344");

然后调用

apiService.addService(serviceBody, amountBody);

【讨论】:

  • 我不应该使用@Part("name"),所以我使用的是“@Part MultipartBody.part service”格式,还更正了 apiservice(authtoken,serviceBody,amountBody) 不起作用
【解决方案2】:

请尝试添加

@Multipart

之前

@POST("services")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多