@Part in multipart以双引号发送字符串参数



在API之后,我要求编辑用户配置文件。我必须发送用户配置文件图片,所以我在API中使用了多部分。

@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""用户名":"Keval Shukla""language_id":"27""state_id":"53">

如何使用MultiPart删除双引号?

它必须像-

@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

您可以将文件以外的参数作为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

您这样做是错误的,当您使用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);

使用RequestBody而不是String。

@Part("user_id") RequestBody user_id,

称之为

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

相关内容

  • 没有找到相关文章

最新更新