GVKun编程网logo

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

8

对于详解Retrofit动态参数感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解非固定参数、非必须参数,并且为您提供关于7python函数参数(必须参数、可变参数、关键字参数)、Ajax关键

对于详解Retrofit 动态参数感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解非固定参数、非必须参数,并且为您提供关于7 python函数参数(必须参数、可变参数、关键字参数)、Ajax 关键点(get请求---post请求)、ajax数据交互的方式(get/post请求、 url)(原生自带的fetch请求)、angular4 get,post请求(带参数,与不带参数)的宝贵知识。

本文目录一览:

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

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

详解Retrofit 动态参数(非固定参数、非必须参数)(Get、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);

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

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

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

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

使用

登录:

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

未登录:

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

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

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

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

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

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

修改Header

固定添加Header

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

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

动态添加Header

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

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

多个Header

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

固定与动态的Header的混合

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:

  • 为Retrofit统一添加post请求的默认参数的方法
  • Retrofit2.0 实现图文(参数+图片)上传方法总结
  • Retrofit2.0 公共参数(固定参数)

7 python函数参数(必须参数、可变参数、关键字参数)

7 python函数参数(必须参数、可变参数、关键字参数)

  1 #python中的函数定义,使用和传参
  2 
  3 ###------------------- 必要参数 -------------------------------------
  4 
  5 必要参数,即函数调用时必须要传的参数,
  6 
  7 
  8  #下面进行举例说明
  9  
 10  def helloWorld(a):
 11      print(''输出:hello'')
 12  
 13  if __name__ == ''__main__'':
 14      helloWorld("aaa")   ## 必须要有参数
 15      
 16 ##------------  默认参数 -----------------------------------------------------------
 17 说明:
 18     1.必选参数在前,
 19     2,有多个默认参数时,调用的时候,既可以按顺序提供默认参数
 20     3,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上
 21 
 22 例如:
 23 def enroll(name, gender, age=6, city=''Beijing''):
 24     print(''name:'', name)
 25     print(''gender:'', gender)
 26     print(''age:'', age)
 27     print(''city:'', city)
 28 
 29 
 30 enroll(''Bob'', ''M'', 7)
 31 enroll(''Adam'', ''M'', city=''Tianjin'')
 32 
 33  
 34 特别重要:
 35     ###  定义默认参数要牢记一点:默认参数必须指向不变对象!
 36 
 37 例如:
 38 def add_end(L=[]):
 39     L.append(''END'')
 40     return L
 41 
 42 print (add_end())
 43 print (add_end())
 44 
 45 结果:
 46     [''END'']
 47     [''END'',''END'']
 48 
 49 原因说明:
 50     Python函数在定义的时候,默认参数L的值就被计算出来了,在每次调用时,L参数已经变前一次调用所更改了,
 51 
 52 所以:
 53     避免在函数里面去修改函数的默认参数值。
 54 
 55 
 56 ##--------------------- 关键字参数   --------------------------------------------
 57 
 58 
 59 def about(name,course,site):
 60     print (name,course,site)
 61 
 62 about(''jim'',''100'',''www.baidu.com'')   ## 必须按顺序传参
 63 about(site=''www.baidu.com'',name=''green'',course=100)   ##以关健字方式传入参数(可以不按顺序)
 64 
 65 
 66     
 67 
 68 ##-------------- 不定长参数(可变参数) (这些可变参数在函数调用时自动组装为一个tuple)-----------------------------------------------------------
 69 
 70 顾名思义:
 71     可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
 72 
 73 ###重要说明:
 74     (可变参数的好处是,不用事先准备好LIST或者元组)
 75     这些可变参数在函数调用时自动组装为一个tuple
 76 
 77 定义:
 78 def loop(*args):
 79     for x in args:
 80         print x
 81 
 82 loop(1,2,3)
 83 
 84 结果是:
 85 1
 86 2
 87 3
 88 
 89 ###说明2:
 90     如果已经有了一个列表或者元组,怎么传递可变参数呢??? 如下:
 91 
 92 def loop(*args):
 93     for x in args:
 94         print x
 95 
 96 loop(1,2,3)
 97 a=[4,5,6]
 98 loop(*a) ##  这里要在列表 或元组 前面加* 连传递参数进来。
 99 
100 
101 
102 
103 ###------------------- 这也是不定长参数  ----------------------------------------------------------------
104 
105 说明:
106     这些关键字参数在函数内部自动组装为一个dict
107 
108 函数定义:
109 def person(name, age, **kw):
110     print(''name:'', name, ''age:'', age, ''other:'', kw)
111 
112 调用1:
113 >>> person(''Michael'', 30)
114 name: Michael age: 30 other: {}
115 
116 调用2:
117 >>> person(''Adam'', 45, gender=''M'', job=''Engineer'')
118 name: Adam age: 45 other: {''gender'': ''M'', ''job'': ''Engineer''}
119 
120 调用3:
121 >>> extra = {''city'': ''Beijing'', ''job'': ''Engineer''}  ---事先已经有了一个字典
122 >>> person(''Jack'', 24, **extra)                        ----  **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数
123 name: Jack age: 24 other: {''city'': ''Beijing'', ''job'': ''Engineer''}
124 
125 ###调用说明:
126 **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,
127 注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
128 
129 
130 ##--------------------------------------------

 

Ajax 关键点(get请求---post请求)

Ajax 关键点(get请求---post请求)

总结

以上是小编为你收集整理的Ajax 关键点(get请求---post请求)全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

ajax数据交互的方式(get/post请求、 url)(原生自带的fetch请求)

ajax数据交互的方式(get/post请求、 url)(原生自带的fetch请求)

传统的交互方式:

1 <form action="/get">
2 用户名:<input type="text" use=""/>
3 密码:<input type="password"/>
4 <input type="submit" value="提交"/>
5 <form>

 

<form action="/post" method="POST" enctype="application/x-www-form-urlencoded" >
        用户名:<input type="text" name="user"/>
        密 码:<input type="password" name="password" />
        <input type="submit" value="提交">
</form>

 

jq 的 ajax 的方式:

  首先要引入 jQuery 文件

/*
url:请求地址   (后台童鞋一定会你的)
data:数据的拼接
dataType  --(等同于)->   JSON.parse()    (把json转成对象)
success:function(data){
    data ->为object,直接使用的数据
}
*/
$.ajax({
    url:必须传,(向后台要)
    data:{
        人:刘德华
        狼:
        神:
        key(为前后端一起定义的字段):val(前端传的数据)
    },
    success:function(json/data){
        let data = JSON.parse(json);//如果拿到的数据是json就转成对象,如果是data(对象)就直接使用
        //dataType:"json"
        if(data.code === 0){
            $("#txt").removeClass("ok");
            $("#txt").addClass("error");
        }
        if(data.code === 1){
            $("#txt").removeClass("error");
            $("#txt").addClass("ok");
        }
    }
})
$(''#txt'').blur(function(){
        // $.ajax({
        //     url:''/getget'',
        //     dataType:''json'',
        //     data:{
        //         ren:$(this).val()
        //     },
        //     success:function(data){
        //        if(data.code){
        //             $(''#txt'')[0].className = ''ok'';
        //        }else{
        //             $(''#txt'')[0].className = ''error'';
        //        }
        //     }
        // })
//下面这种方式,也可以。
        fetch(''/getget?ren=''+$(this).val())
        .then(e=>e.json())
        .then(data=>{
            console.log(data);
        });
    });

 

 原生的 ajax 交互模型

<body>
    用户名:<input type="text"  id="txt"/>
    <input type="button" value="提交" id="btn">
<script>
    //xxx.com?a=5#id=0
    //?a=5 问号到井号之间的信息叫查询信息 window.location.search
    //key=val&key=val
    btn.onclick = function(){
        /*
            在IE下,有ActiveXObject插件,
            new ActiveXObject("Mscrosoft.XMLHttp");
        */
        let xhr = new XMLHttpRequest;
        /*
            请求方式有:
                GET、POST、DELETE、PUT

               GET通过URL的方式去请求的服务器
                
        */
        xhr.open(''get'',''/get?ren=''+txt.value,true);
        xhr.send();
        xhr.onload = function(){
            console.log(xhr.responseText);
        }


        //未来会用下面这个 (原生自带的请求方式)
        // fetch(''/get?ren=''+txt.value)
        // .then((e)=>e.json())
        // .then(data=>{
        //     console.log(data);
        // });
    }
</script>
</body>
/*
    ajax 的模型叫 电话模式
    1.先有一个电话      创建ajax对象
    2.输入号码(拨号)    填写请求地址  xhr.open("请求的方式","url地址"+具体字段,请求异步默认为true)
    3.发送             send()
    4.等待             xhr.onload
    5.成功接收         在xhr.onload中接收到数据  xhr.responseText
*/

btn.onclick = function(){
    let xhr = new XMLHttpRequest;//1.创建ajax对象
    xhr.open("get","/get?user="+txt.value,true)//第三个参数:是否异步(true:要异步); 2.填写请求地址
    xhr.send();  //3.发送
    xhr.onload = function(){    //4.等待服务器响应
        //console.log(xhr.responseText)  //5.接收的信息
        let data = JSON.parse(xhr.responseText);

        if(data.code == 0){
            txt.className = "error"
        }else if(data.code == 1){
            txt.className = "ok"
        }
    }
}

 


 

URL:
  url是统一资源定位符

  https://www.baidu.com:80/item/url/110640?fr=aladdin

URL的结构:
  第一部分:
    模式/协议(scheme)
    常用超文本传输协议(Hypertext Transfer Protocol,缩写为HTTP)
    https——用安全套接字层传送的超文本传输协议
    ftp——文件传输协议
    file——当地电脑或网上分享的文件

  第二部分
    域名 ip地址的一个别名
    119.75.217.109 百度的ip地址
 
    顶级域名:
      www.baidu.com
    二级域名:
      baike.baidu.com
    三级域名:
      baike.tieba.baidu.com

    .com 商用的国际域名
    .cn 供商用的中文域名
    .net 用于网络供应服务商(系统类的经常使用NET域名)
    .org 用于官方组织
    .edu 用于教育
    .gov 用于政府

  :数字端口号
    范围就是0到65535
    浏览网页服务的80端口
    mongo:27017

  带  /  有可能是目录,也有可能是接口,也有可能是二次封装之前的目录呀,接口呀

  ? 查询信息
  ?到#之间的位置

   window.location.search 包含问号,不包含#号
  即可以读也可以写,写了查询信息是会刷新页面

  #之后的锚信息
   window.location.hash 包含#号
  即可以读也可以写,写了锚信息是不会刷新页面

   window.onhashchange   当hash值发生变化的时候才会触发

get请求的特性:
  比post快,
  ● get会将 静态资源 缓存起来(静态资源,除了数据),而post不会。(在低IE下,不仅会缓存 静态资源,也会缓存 数据)
    解决:让第二次访问的地址和第一次的地址不一样,就能解决 数据被缓存起来 的缺点
  url字节长度是每个浏览器都是不一样的(体积是有限的)
  相对来说是不安全
  中文的转码问题(在chrome中中文会自动转成URI编码,而IE10以下浏览器都不会自动转)
  所以要手动转编码
  更擅长于,查找、展示数据、轻量的数据
 
  URI :Uniform Resource Identifier,统一资源标识符;
  URL:Uniform Resource Locator,统一资源定位符;
  URN:Uniform Resource Name,统一资源名称。
  其中,URL,URN是URI的子集。

   decodeURI( '' %E7%8E%8B '' ) -> 中文

   encodeURI( 中文 ) -> uri编码

  %E5%B0%8F%E7%87%95%E5%AD%90 - >小燕子

post请求的过程:
  (1)浏览器请求tcp连接(第一次握手)
  (2)服务器答应进行tcp连接(第二次握手)
  (3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
  (4)服务器返回100 Continue响应
  (5)浏览器发送数据
  (6)服务器返回200 OK响应
get请求的过程:
  (1)浏览器请求tcp连接(第一次握手)
  (2)服务器答应进行tcp连接(第二次握手)
  (3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
  (4)服务器返回200 OK响应
也就是说,目测get的总耗是post的2/3左右,这个口说无凭,网上已经有网友进行过测试。
 
post请求的特点: 
  服务器发送
  安全一点点
  体积,理论上可以无限大(但是一般后台人员都会限制)
  在请求发送之前,需要设置请求头
     请求头:xhr.setRequestHeader(''Content-Type'',''application/x-www-form-urlencoded'');
  一般用在用户信息上、比较大的数据传输

用 get 对于请求的 数据 和 静态资源(html的页面。图片),在低 IE 下都会缓存
高版本浏览器是只缓存静态资源,不缓存数据
 
什么样的情况下才会被浏览器缓存?
  第二次的地址和第一次的地址一样,那么第二次找到的资源就为第一次缓存起来的资源。
解决:让第二次访问的地址和第一次的地址不一样,就能解决 数据被缓存起来 的缺点
   get?user="+txt.value + "&id=" + 随机数 / 时间戳 (new Date/ Date.now())
 
 

angular4 get,post请求(带参数,与不带参数)

angular4 get,post请求(带参数,与不带参数)

##一:在app.module.ts引入HttpMoudle

import { BrowserModule } from ''@angular/platform-browser'';
import { HttpModule  } from ''@angular/http'';

imports: [
    BrowserModule,
    HttpModule
  ],

##二:在对应使用请求的组件的ts中引入

import { Http  , ResponseOptions , Headers  , URLSearchParams } from ''@angular/http'';

##三:在构造函数中注入

 constructor( private http: Http ) { }

##四:使用get和post请求 ①:带参数的post(一定要使用URLSearchParams进行封装)

getData() {

    const   d = new URLSearchParams();
    d.append(''para'',   ''value'' );
    d.append(''para1'',   ''value'' );

  this.http.post(  ''地址'' ,  d)
  .map(res => res.json()) // (5)
  .subscribe(data => {
     alert(JSON.stringify(data));
  }, err => {
    console.error(''ERROR'', err);
  });

②:带参数的get请求

getData() {

    const dates = {
     ''str'': 123
  };

  this.http.get(''地址'' , {params: dates})
  .map(res => res.json())
  .subscribe(data => {
    alert(JSON.stringify(data));
  }, err => {
    console.error(''ERROR'', err);
  });

③:不带参数的get请求

getData() {
  this.http.get(''/hello'')
  .map(res => res.json())
  .subscribe(data => {
    alert(JSON.stringify(data));
  }, err => {
    console.error(''ERROR'', err);
  });

##五:后台接收

@RequestMapping("/hello")
    @ResponseBody
    public String hello(HttpServletRequest req) {
        System.out.print(req.getParameter("str"));
        Gson gson = new Gson();
        String s1= gson.toJson(1);
        return s1;
    }

我们今天的关于详解Retrofit 动态参数非固定参数、非必须参数的分享已经告一段落,感谢您的关注,如果您想了解更多关于7 python函数参数(必须参数、可变参数、关键字参数)、Ajax 关键点(get请求---post请求)、ajax数据交互的方式(get/post请求、 url)(原生自带的fetch请求)、angular4 get,post请求(带参数,与不带参数)的相关信息,请在本站查询。

本文标签: