由于项目比较老,刚接手这个项目,看接口文档,说明的让咱们规定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”}}。
起初我以为是添加个请求头,这还不容易吗,结果一下午没调通,报错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<ResultBean<List<HomeBanner>>> 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<String, Object> 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<String, Object> 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<String, Object> header,Map<String, Object> body) {
-
Map<String, Object> map =
new HashMap<>();
-
map.put(
"header",header);
//指定key 为header
-
map.put(
"body",body);
//指定key为body
-
return map;
-
}
-
}
这样就请求成功了,在请求头上浪费了好多时间,
转自:https://blog.csdn.net/hhoo3344521/article/details/80075409