Retrofit+Rxjava 以json格式提交到后台方法

由于项目比较老,刚接手这个项目,看接口文档,说明的让咱们规定header和body格式传递,格式如下:

 

JSON对象”中的名称定义为header,header的值是一个JSON对象,称之为“消息头JSON对象”,“消息头JSON对象”包含了若干名称/值对;消息体在“消息JSON对象”中的名称定义为body,body的值是一个JSON对象,称之为“消息体JSON对象”,“消息体JSON对象”包含了若干名称/值对。例如,{"header":{"a":"1","b":"2","c":"3"},"body":{"d":"4","e":"5"}}。

Retrofit+Rxjava 以json格式提交到后台方法_第1张图片

起初我以为是添加个请求头,这还不容易吗,结果一下午没调通,报错http:406

后台跟我说应该是要我传json,我才理解他的意思,

方法:

 

 
package com.yblt.hct.network.api;

import com.yblt.hct.bean.HomeBanner;
import com.yblt.hct.bean.ResultBean;

import java.util.List;

import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import rx.Observable;

/**
 * Created by yangfan on 17/04/24.
 */
public interface AppApi {

    /**
     * 首页banner
     *
     * @param route
     * @return
     */
    @Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头
    @POST("other")
    Observable>> getBanner(@Body RequestBody route);

}

 

 

然后按照他们定的格式封装数据传json

 

 

 
public class NetApi {

//    {
//        "header":{
//                "a":"1",
//                "b":"2",
//                "c":"3"
//        },
//        "body":{
//                "d":"4",
//                "e":"5"
//        }
//    }
    public static void getBanner(Context context, String fromType,String isNewUser,String timeId,String transactionType,Observer observer) {
        Map map = new HashMap<>();//body  map
        map.put("fromType", fromType);
        map.put("isNewUser", isNewUser);
        map.put("timeId", timeId);
        String json= new Gson().toJson(CommonUtil.getServiceParamsMap(CommonUtil.getHeaderParamsMap(transactionType),map));//要传递的json
        RequestBody requestBody=RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),json);
        NetClient.getInstance().getPost("", true, context,transactionType).getBanner(requestBody).subscribeOn(Schedulers.io()).
                observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }
}

 

 

 

 

 

下边是commenutils方法的 json  map

 

 
public class CommonUtil {
    /**
     * 接口头参数
     * String 类型  否则报错
     */
    public static Map getHeaderParamsMap(String transactionType) {
        Map map = new HashMap<>();
        map.put("messageID", Constant.MESSAGEID);//messageId
        map.put("sign", Constant.SIGN);//sign
        map.put("betPlat", "1");//平台
        map.put("imei", getPhoneSign());//识别码
        map.put("channel", getAppChannel());// 渠道
        map.put("terminal", "2");
        map.put("timeStamp", String.valueOf(System.currentTimeMillis()));// 时间戳
        map.put("transactionType", transactionType);
        map.put("ua", getPhoneBrand());
        map.put("version", getVersionName(ContextHelper.getApplication()));
        return map;
    }
    /**
     * 接口传json map  里面存放header + body
     * String 类型  否则报错
     */
    public static Map getServiceParamsMap(Map header,Map body) {
        Map map = new HashMap<>();
        map.put("header",header);//指定key 为header
        map.put("body",body);//指定key为body
        return map;
    }
}

 

 

这样就请求成功了

 

 

 

你可能感兴趣的:(Java编程语言,Android编码,androidstudio)