【问题标题】:@Part in multipart sends the string parameters in double quotemultipart 中的@Part 以双引号发送字符串参数
【发布时间】:2018-05-04 11:26:58
【问题描述】:

以下 API 我调用了 Editing User Profile 。我必须发送用户个人资料图片,所以我在 API 中使用了 multipart 。

@Multipart
@POST(ApiURLs.EDIT_USER_PROFILE)
Call<EditProfileModel> EditUserProfile (@Part("user_id) String userId , 
@Part("user_name") String userName ,
@Part("language_id") String languageId , 
@Part("state_id") String stateId , 
@Part MultipartBody.Part 
profilePicture); 

当服务调用请求的参数会像

"user_id" : ""23"" "user_name" : ""Keval Shukla"" "language_id": ""27"" "state_id" : "53""

如何使用 MultiPart 删除双引号?

【问题讨论】:

    标签: android web-services httprequest retrofit retrofit2


    【解决方案1】:

    使用 RequestBody 代替 String。

    @Part("user_id") RequestBody user_id,
    

    叫它

    String userId= "123456";
    RequestBody id =
            RequestBody.create(
                    okhttp3.MultipartBody.FORM, userId);
    

    【讨论】:

      【解决方案2】:

      您可以将文件以外的参数发送为RequestBody

      @Multipart
      @POST(ApiURLs.EDIT_USER_PROFILE)
      Call<EditProfileModel> EditUserProfile (@Part("user_id) RequestBody userId , 
      @Part("user_name") RequestBody userName ,
      @Part("language_id") RequestBody languageId , 
      @Part("state_id") RequestBody stateId , 
      @Part MultipartBody.Part profilePicture); 
      

      String 转换为RequestBody

      RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), userName); // Here userName is String
      

      【讨论】:

        【解决方案3】:

        你做错了,当你使用 MultiPart 作为正文类型时,你必须指定每个请求参数的正文类型。

        例如,您正在发送文件(图像、视频等)和字符串参数。所以你需要指定所有参数并将其转换为特定的体型。

        你需要把参数分成两部分,

        1) MultipartBody - 用于媒体文件

        2) RequestBody - 用于其他字符串或其他数据类型参数

        例如

         /*Create API Method*/
         @Multipart
         @POST("apiurl")
         Call<Object> callMethodName(@Part("mobile_no") RequestBody mobile_no, /*String param */
                                     @Part("password") RequestBody password, /*String param */
                                     @Part MultipartBody.Part profile_img /*file param */);
        

        我已将Parse类型定义为multipart/form-data,您可以根据自己的要求定义,

        public static final String MULTIPART_TYPE = "multipart/form-data";
        

        现在创建如下请求参数, /* 添加字符串参数*/ RequestBody reqNumber = RequestBody.create(MediaType.parse(Constants.MULTIPART_TYPE), number.toString()); RequestBody reqPass = RequestBody.create(MediaType.parse(Constants.MULTIPART_TYPE), pass.toString());

        /* Adding File*/
        File file = new File(selectedImagePath);
                    RequestBody requestFile = RequestBody.create(MediaType.parse(Constants.MULTIPART_TYPE), file);
                    bodyFile = MultipartBody.Part.createFormData("profile_img", file.getName(), requestFile);
        

        作为最后一步,您需要将请求参数传递给API调用方法,如下所示,它可以识别参数并将其发送到服务器。

        /* Call API Method */ 
        RestClient.getApiClient().callMethodName(reqNumber, reqPass, bodyFile);
        

        【讨论】:

          【解决方案4】:

          一定是这样的——

          @Multipart
          @POST(ApiURLs.EDIT_USER_PROFILE)
          Call<EditProfileModel> EditUserProfile (
                                        @Part("user_id") RequestBody userId , 
                                        @Part("user_name") RequestBody userName ,
                                        @Part("language_id") RequestBody languageId , 
                                        @Part("state_id") RequestBody stateId , 
                                        @Part RequestBody profilePicture); 
          

          并且,要创建 requestBody

          File file = new File(imageURI.getPath());
          RequestBody fbody = RequestBody.create(MediaType.parse("image/*"), file); // File requestBody
          RequestBody userName = RequestBody.create(MediaType.parse("text/plain"), userNameSTRING); // String requestBody
          

          【讨论】:

            猜你喜欢
            • 2014-09-20
            • 2012-11-07
            • 2014-11-27
            • 1970-01-01
            • 2014-09-26
            • 1970-01-01
            • 2017-10-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多