retrofit2使用json請求和form表單請求
json請求和form表單請求的區別
json和form表單請求的區別主要是以下兩點
- content-type不一致
- 數據格式不一致
注:圖片爲網絡圖片,侵刪
json:
form表單:
retrofit分別實現
json實現
- 先看retrofit的接口實現部分,使用json方式請求,我們需要使用@body來傳入參數
- 不能添加@FormUrlEncoded 不然會報錯
/**
* 創建任務
*/
@POST("prodmd/mapdesktop/api/mvls/t")
Observable<ResponseBody> createMission(@Body RequestBody info);
- 在看傳入參數部分,我需要把數據轉成json格式,放入RequestBody 中並申明content-Type是json類型,在開始請求就行
HashMap<String, Object> paramsMap = new HashMap<>();
paramsMap.put("geoId", baseMissionInfoEntity.getTaskId());
paramsMap.put("geoName", baseMissionInfoEntity.getTaskName());
paramsMap.put("featureType", baseMissionInfoEntity.getFeatureType().getType());
paramsMap.put("userName", userInfo.getUserName());
paramsMap.put("geoStr", stringBuilder);
paramsMap.put("bizType", "300");
//需要把數據轉成json格式
String strEntity = GsonUtil.toJson(paramsMap);
//添加contentType
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), strEntity);
//開始請求
addDisposable(PlanningRetrofitHelper.createTaskApi().createMission(requestBody)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Consumer<ResponseBody>() {
@Override
public void accept(ResponseBody responseBody) throws Exception {
getView().showCreateSuccess(baseMissionInfoEntity.getTaskId());
}
}, throwable -> {
ToastUtil.showToast("創建任務出現錯誤:" + throwable.toString());
}));
form表單
- 先看retrofit的接口實現部分,使用表單方式請求,我們只需要把參數用@Field接受即可
- 一定要加上@FormUrlEncoded不然會報錯
/**
* 刪除任務
*
* @param taskId
* @return
*/
@FormUrlEncoded
@POST("mission/api/deleteFlyTask")
Observable<ResponseBody> deleteMission(@Field("flyId") String taskId);
- 在看傳入參數部分,只要正常調用即可
addDisposable(PlanningRetrofitHelper.createTaskApi().deleteMission(taskId)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseBody>() {
@Override
public void accept(ResponseBody responseBody) throws Exception {
delSuccess(position);
}
}, throwable -> {
delSuccess(position);
// delFiled();
}));