retrofit2使用json請求和form表單請求

json請求和form表單請求的區別

json和form表單請求的區別主要是以下兩點

  • content-type不一致
  • 數據格式不一致

注:圖片爲網絡圖片,侵刪
json:
json請求
form表單:
form表單

retrofit分別實現

json實現

  1. 先看retrofit的接口實現部分,使用json方式請求,我們需要使用@body來傳入參數
  2. 不能添加@FormUrlEncoded 不然會報錯
  /**
     * 創建任務
     */

    @POST("prodmd/mapdesktop/api/mvls/t")
    Observable<ResponseBody> createMission(@Body RequestBody info);
  1. 在看傳入參數部分,我需要把數據轉成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表單

  1. 先看retrofit的接口實現部分,使用表單方式請求,我們只需要把參數用@Field接受即可
  2. 一定要加上@FormUrlEncoded不然會報錯
 /**
     * 刪除任務
     *
     * @param taskId
     * @return
     */
    @FormUrlEncoded
    @POST("mission/api/deleteFlyTask")
    Observable<ResponseBody> deleteMission(@Field("flyId") String taskId);
  1. 在看傳入參數部分,只要正常調用即可

  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();
                }));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章