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”}}。


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

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

方法:

 
  

   
   
  1. package com.yblt.hct.network.api;
  2. import com.yblt.hct.bean.HomeBanner;
  3. import com.yblt.hct.bean.ResultBean;
  4. import java.util.List;
  5. import okhttp3.RequestBody;
  6. import retrofit2.http.Body;
  7. import retrofit2.http.Headers;
  8. import retrofit2.http.POST;
  9. import rx.Observable;
  10. /**
  11. * Created by yangfan on 17/04/24.
  12. */
  13. public interface AppApi {
  14. /**
  15. * 首页banner
  16. *
  17. * @param route
  18. * @return
  19. */
  20. @Headers({ “Content-Type: application/json”, “Accept: application/json”}) //需要添加头
  21. @POST( “other”)
  22. Observable<ResultBean<List<HomeBanner>>> getBanner( @Body RequestBody route);
  23. }


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

   
   
  1. public class NetApi {
  2. // {
  3. // "header":{
  4. // "a":"1",
  5. // "b":"2",
  6. // "c":"3"
  7. // },
  8. // "body":{
  9. // "d":"4",
  10. // "e":"5"
  11. // }
  12. // }
  13. public static void getBanner(Context context, String fromType,String isNewUser,String timeId,String transactionType,Observer observer) {
  14. Map<String, Object> map = new HashMap<>(); //body map
  15. map.put( "fromType", fromType);
  16. map.put( "isNewUser", isNewUser);
  17. map.put( "timeId", timeId);
  18. String json= new Gson().toJson(CommonUtil.getServiceParamsMap(CommonUtil.getHeaderParamsMap(transactionType),map)); //要传递的json
  19. RequestBody requestBody=RequestBody.create(okhttp3.MediaType.parse( "application/json; charset=utf-8"),json);
  20. NetClient.getInstance().getPost( "", true, context,transactionType).getBanner(requestBody).subscribeOn(Schedulers.io()).
  21. observeOn(AndroidSchedulers.mainThread())
  22. .subscribe(observer);
  23. }
  24. }


 
  

下边是commenutils方法的 json  map

 
  

   
   
  1. public class CommonUtil {
  2. /**
  3. * 接口头参数
  4. * String 类型 否则报错
  5. */
  6. public static Map getHeaderParamsMap(String transactionType) {
  7. Map<String, Object> map = new HashMap<>();
  8. map.put( "messageID", Constant.MESSAGEID); //messageId
  9. map.put( "sign", Constant.SIGN); //sign
  10. map.put( "betPlat", "1"); //平台
  11. map.put( "imei", getPhoneSign()); //识别码
  12. map.put( "channel", getAppChannel()); // 渠道
  13. map.put( "terminal", "2");
  14. map.put( "timeStamp", String.valueOf(System.currentTimeMillis())); // 时间戳
  15. map.put( "transactionType", transactionType);
  16. map.put( "ua", getPhoneBrand());
  17. map.put( "version", getVersionName(ContextHelper.getApplication()));
  18. return map;
  19. }
  20. /**
  21. * 接口传json map 里面存放header + body
  22. * String 类型 否则报错
  23. */
  24. public static Map getServiceParamsMap(Map<String, Object> header,Map<String, Object> body) {
  25. Map<String, Object> map = new HashMap<>();
  26. map.put( "header",header); //指定key 为header
  27. map.put( "body",body); //指定key为body
  28. return map;
  29. }
  30. }


这样就请求成功了,在请求头上浪费了好多时间,

 
 

转自:https://blog.csdn.net/hhoo3344521/article/details/80075409

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值