将Post请求的数据放在form-data中,使用Retrofit框架的实现方式
前言:我们一般使用Retrofit进行Post的请求的时候都是把上传的数据放在请求体中的,但是在上传文件等操作时会使用到form-data方式上传数据。form-data表单数据
1.创建网络请求接口的两种方式
//适用于数据量少的情况
@Multipart
@POST("app/user/login")
Call<JsonObject> UserLogin(@Part("username") RequestBody username, @Part("password") RequestBody password);
//推荐使用这种方式,把请求的数据集都放在map中,这样统一处理起来非常的方便。
@Multipart
@POST("app/user/login")
Call<JsonObject> userLogin(@PartMap Map<String, RequestBody> requestBodyMap);
2.生成RequestBody
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"),"this_is_username");
//比如可以这样生成Map<String, RequestBody> requestBodyMap
//Map<String, String> requestDataMap这里面放置上传数据的键值对。
private static Map<String, RequestBody> generateRequestBody(Map<String, String> requestDataMap) {
Map<String, RequestBody> requestBodyMap = new HashMap<>();
for (String key : requestDataMap.keySet()) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"),
requestDataMap.get(key) == null ? "" : requestDataMap.get(key));
requestBodyMap.put(key, requestBody);
}
return requestBodyMap;
}