ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Retrofit 动态参数(非固定参数 非必须参数)(Get Post请求)

2019-02-03 09:39:25  阅读:317  来源: 互联网

标签:GET Get detail Header 参数 appid Query Post


关键词:Retrofit 动态参数、非固定参数、非必须参数

有如下场景:

请求数据时:
1. 用户未登录时,不带参数userId;
2. 登录时带上参数userId.

如下接口:

@GET("index.php?r=default/homepage")
Observable<Response<Exercise>> getDataList(@Query("page") int page);

@GET("index.php?r=default/homepage")
Observable<Response<Exercise>> getDataList(@Query("page") int page, @Query("user_id") int userId);
  • 1
  • 2
  • 3
  • 4
  • 5

两个接口,区别就在于有没有『user_id』参数。

这样做,总感觉有点罗嗦,体现不出Retrofit的优越性。有没有更好的方法呢?当然有,那就是动态参数(其实很简单)。

上面的两个接口合并为一个:

@GET("index.php?r=default/homepage")
Observable<Response<Exercise>> getDataList(@Query("page") int page,@Query("user_id") Integer userId);
  • 1
  • 2

使用

登录:

APIWrapper.getInstance().getDataList(mCurrentPage, 10);
  • 1

未登录:

APIWrapper.getInstance().getDataList(mCurrentPage, null);
  • 1

Retrofit运行null值参数,如果在实际调用的时候传一个null, 系统也不会出错,会把这个参数当作没有。

对于参数名称不固定的情况也可以使用Map

@GET("applist/apps/detail")
Call<ResponsePojo> getDetail(@QueryMap Map<String, String> param);
  • 1
  • 2
  • 3

当然,还可以支持固定参数与动态参数的混用

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Query("appid") String appid);
  • 1
  • 2

修改Header

固定添加Header

@Headers("Accept-Encoding: application/json")

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Query("appid") String appid);
  • 1
  • 2
  • 3

动态添加Header

@Headers("Accept-Encoding: application/json")

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Header ("Accept-Encoding") String appid);
  • 1
  • 2
  • 3

多个Header

@Headers({
    "X-Foo: Bar",
    "X-Ping: Pong"
  })
@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Header ("Accept-Encoding") String appid);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

固定与动态的Header的混合

@Headers("Accept-Encoding: application/json")

@GET("applist/apps/detail?type=detail")
Call<ResponsePojo> getDetail(@Header ("Location") String appid);
  • 1
  • 2
  • 3

以上用法同样适用于Post请求。

That’s all.

或许你对这个也感兴趣:

Retrofit2.0 公共参数(固定参数)

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

标签:GET,Get,detail,Header,参数,appid,Query,Post
来源: https://www.cnblogs.com/skiwnchhw/p/10349636.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有