Retrofit中的注解

news2024/10/7 16:16:27

一、Retrofit中的注解有那些?

  • 方法注解:@GET ,@POST,@PUT,@DELETE,@PATH,@HEAD,@OPTIONS,@HTTP
  • 标记注解:@FormUrlEncoded,@Multpart,@Streaming
  • 参数注解:@Query,@QueryMap,@Body,@Field,@FieldMap,@Part,@PartMap
  • 其他注解:@path,@Header,@Headers,@Uri

二、了解方法注解@HTTP

@HTTP注解的作用是可以让我们自己自定义这次接口的请求方式。

  @HTTP(method = "GET", path = "get", hasBody = false)
    @FormUrlEncoded
    Call<ResponseBody> http(@Field("userName") String userName, @Field("password") String pwd);

参数method:使用http注解时必须要指定method,method如果是POST就会执行http方法执行post请求,method如果指定GET就会执行http方法执行get请求。

参数书path:指定path,就需要把指定请求的接口的地址传入

参数hasBody:指定hasBody,就是请求体。post请求有请求体就指定hasBody = true。get请求没有请求体就指定haBody = false。

三、了解参数注解@Body

使用@Body注解在接口类对象中的定义

    @POST("post")
    Call<ResponseBody> postBody(@Body RequestBody body);//自己指定requestBody

测试代码

public class AnnotationUnitTest {
     Retrofit retrofit = new Retrofit.Builder().baseUrl("http://www.httpbin.org/").build();//创建retrofit对象

     HttpbinService httpbinService = retrofit.create(HttpbinService.class);//创建接口类对象,并且设置为全局变量。
    @Test
    public void bodyTest()throws IOException {
        FormBody formBody = new FormBody.Builder()
                .add("a", "1").add("b", "2").build();
        Response<ResponseBody> response = httpbinService.postBody(formBody).execute();
        System.out.println(response.body().string());
    }
}

测试结果

四、其他注解中的@path注解

在接口类对象中的使用

    @POST("{id}")
    Call<ResponseBody> pathInPath(@Path("id") String path);//@path注解作用于参数部分,意思是id=path帮我们替换掉@POST注解里面的参数

@path注解作用于参数部分,意思是{id}里面是id会被@path中的id替换掉替换成参数path

测试代码:

    @Test
    public void pathTest() throws IOException {
        //实际上请求到的是https://www。httpbin.org/post
        Response<ResponseBody> response = httpbinService.pathInPath("post").execute();
        System.out.println(response.body().string());
    }

测试结果:

可以看到请求的url是http://www.httpbin.org/post,使用的是post请求

五、那么我们尝试使用@path注解调用post请求,并且传递用户名和密码两个参数

在接口类对象中的使用

@POST("{id}")
    @FormUrlEncoded
    Call<ResponseBody> pathInPath(@Path("id") String path,@Field("userName") String userName, @Field("password") String pwd);//@path注解作用于参数部分,意思是id=path帮我们替换掉@POST注解里面的参数

测试代码

    @Test
    public void pathTest() throws IOException {
        //实际上请求到的是https://www。httpbin.org/post
        Response<ResponseBody> response = httpbinService.pathInPath("post","Anglin","rssqzqyp").execute();
        System.out.println(response.body().string());
    }

测试结果

六、其他注解中的@Header注解

@Header是用来设置请求头的

在接口类对象中的使用

 @POST("{id}")
    @FormUrlEncoded
    Call<ResponseBody> pathInPath(@Path("id") String path, @Header("os")String os, @Field("userName") String userName, @Field("password") String pwd);//@path注解作用于参数部分,意思是id=path帮我们替换掉@POST注解里面的参数

测试代码

   @Test
    public void pathTest() throws IOException {
        //实际上请求到的是https://www。httpbin.org/post
        Response<ResponseBody> response = httpbinService.pathInPath("post","Android","Anglin","rssqzqyp").execute();
        System.out.println(response.body().string());
    }

运行结果

七、其他注解中的@Headers注解

@Headers是添加多个请求头或者写一个请求头都可以,写多个要用花括号{}

在接口类对象中的使用

    @Headers({"os:amdroid","version:1.0"})
    @POST("post")
    Call<ResponseBody> postWithHeaders();

测试代码

    @Test
    public void headersTest() throws IOException {
        Call<ResponseBody> reponse = httpbinService.postWithHeaders();
        System.out.println(reponse.execute().body().string());
    }

测试结果

可以看到我们已经成功添加了请求头平台和版本号。

八、其他注解中的@Url

@url注解作用于参数中,作用是指定完整的http地址,不像之前的注解还要自己进行拼接。

在接口类对象中的使用

   @POST
    Call<ResponseBody> postUrl(@Url String url);

测试代码

   @Test
    public void urlTest() throws IOException {
        Response<ResponseBody> response = httpbinService.postUrl("http://www.httpbin.org/post").execute();
        System.out.println(response.body().string());
    }

测试结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1270650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue+el-tooltip 封装提示框组件,只有溢出才提示

效果 封装思路 通过控制el-tooltip的disabled属性控制是否提示通过在内容上绑定mouseenter事件监听内容宽度和可视宽度&#xff0c;判断内容是否溢出 封装代码 <template><div style"display: flex" class"column-overflow"><el-tooltip…

XUbuntu22.04之OBS强大录屏工具(一百九十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【Linux】ln命令使用

ln命令 ln是linux中又一个非常重要命令&#xff0c;请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同步的链接&#xff0c;这个命令最常用的参数是-s&#xff0c;具体用法是&#xff1a;ln –s 源文件 目标文件。 当我们需要在不同的目录&#xff0c;用到相…

第三方检测机构实验室信息管理系统LIMS全套源码

​LIMS实验室信息管理系统源码&#xff0c;支持二次开发 LIMS实验室信息管理系统是一种软件类型&#xff0c;旨在通过跟踪与样品、实验、实验室工作流程和仪器相关的数据&#xff0c;提高实验室产能和效率。覆盖实验室从合同审批、委托下单、样品管理、生产调度、检测记录、报告…

Talk | UCSB博士生许闻达:细粒度可解释评估初探

本期为TechBeat人工智能社区第551期线上Talk。 北京时间11月29日(周三)20:00&#xff0c;UC Santa Barbara博士生—许闻达的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “细粒度可解释评估初探”&#xff0c;分享了他们团队在具备解释性的细粒度…

彻底删除VsCode配置和安装过的插件与缓存

前言 当你准备对 Visual Studio Code&#xff08;VSCode&#xff09;进行重新安装时&#xff0c;可能遇到一个常见问题&#xff1a;重新安装后&#xff0c;新的安装似乎仍然保留了旧的配置信息&#xff0c;这可能会导致一些麻烦。这种情况通常是由于卸载不彻底所致&#xff0c…

MySQL官网推荐书籍

MySQL官网推荐书籍 图片有防盗链csdn转存失败。有图版传送门MySQL官网推荐书籍 高效的MySQL性能&#xff1a;Daniel Nichter的最佳实践和技术 Daniel Nichter 向您展示了如何应用直接影响 MySQL 性能的最佳实践和技术。您将学习如何通过分析查询执行、为常见 SQL 子句和表联接…

一套后台管理系统的入门级的增删改查(vue3组合式api+elemment-plus)

一、页面示意&#xff1a; 图一 图二 二、组件结构 列表组件 &#xff1a;index.vue,对应图一添加组件&#xff1a;add.vue&#xff0c;对应图二&#xff0c;用抽屉效果编辑组件&#xff1a;edit.vue&#xff0c;和添加组件的效果一个。 三、代码 1、列表组件: index.vue …

Ubuntu使用Nginx部署前端项目——记录

安装nginx 依次执行以下两条命令进行安装&#xff1a; sudo apt-get update sudo apt-get install nginx通过查看版本号查看是否安装成功&#xff1a; nginx -v补充卸载操作&#xff1a; sudo apt-get remove nginx nginx-common sudo apt-get purge nginx nginx-common su…

为计算机设计一个完美的思维模型,帮找bug和漏洞,一起来做渗透测试吧 最赚钱的10种思维模型

芒格 如果我不能淘汰自己一年前的思维模型&#xff0c;这一年我就白过了。&#xff08;终身学习&#xff0c;不断迭代自己。&#xff09; 思维模型是什么&#xff0c;有哪些&#xff1f; 思维模型是用来简化和理解复杂现实世界的概念框架。它们是一种思考和解决问题的工具&a…

8个最流行的Revit插件【2023-2024】

NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 Revit 已取代 AutoCAD 成为全球行业标准软件。 随着设计复杂性的增加&#xff0c;近年来插件变得更加必要。 热…

【腾讯地图】【微信小程序】地图选点

【相关文章】 【腾讯地图】【微信小程序】地图选点 【腾讯地图】【微信小程序】路线规划 【腾讯地图】【微信小程序】城市记录&#xff08;基于地图选点入门版&#xff09; 【效果展示】 【官方文档】 微信小程序插件-地图选点插件 【完善流程】 当前操作和官方文档操作有部…

06 # 枚举类型

一个角色判断例子 function initByRole(role) {if (role 1 || role 2) {// do sth} else if (role 3 || role 4) {// do sth} else if (role 5) {// do sth} else {// do sth} }上面的代码存在的问题&#xff1a; 可读性差&#xff1a;很难记住数字的含义可维护性差&…

前端笔记:React的form表单全部置空或者某个操作框置空的做法

原创/朱季谦 在React框架前端开发中&#xff0c;经常会有弹出框的开发&#xff0c;涉及到弹出框&#xff0c;难免就会有表单。一般在关闭弹出框或者对表单联动时&#xff0c;往往都需要考虑对表单进行置空操作了。 我以前在工作就遇到过这类问题&#xff0c;正好顺便对表单置空…

Linux RN6752 驱动编写

一、概述 关于 RN6752V1 这个芯片这里就不做介绍了&#xff0c;看到这篇笔记的小伙伴应该都明白&#xff0c;虽然说 RN6752V1 芯片是 AHD 信号的解码芯片&#xff0c;但是也可以把芯片当做是一个 YUV 信号的 MIPI 摄像头&#xff0c;所以驱动的编写和 MIPI 摄像头无太大的区别。…

Docker篇之docker部署harbor仓库

一、首先需要安装docker step1&#xff1a;安装docker #1、安装yun源 yum install -y yum-utils #2、配置yum源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 如果上面源不稳定的话&#xff0c;更换为下列的aliyun源 yu…

爬虫学习 逆向爬虫(六)

多任务异步协程 协程:更高效的利用CPU import timedef func():print("黎明")time.sleep(3)print("还是黎明")func() 等待时机长 sleep时CPU不再工作 IO操作(费时不费力)->阻塞 线程运行阻塞后 移出主线程 移动到下一个 4个任务一个线程 …

首次部署Linux系统的经历

我是一名电子信息工程专业的学生&#xff0c;有次在图书馆上自习的时候无意间看到其他同学的电脑屏幕&#xff0c;黑色的屏幕上显示着一行一行的代码&#xff0c;勾起了我无限的好奇&#xff0c;经过询问得知他是用的Linux操作系统&#xff0c;是和Windows完全不同的系统&#…

Python解释器和环境变量配置(超详细)

一、 python解释器下载 1.百度python官网并打开 官网网址&#xff1a;www.python.org/ 在这里插入图片描述 2.选择DownLoads&#xff0c;Windows并打开 3.在下图页面选择你需要的版本下载即可&#xff08;本文以python 3.10.4版本演示&#xff09; 在这里插入图片描述 二、安…

基于OpenCV的手势识别系统设计与开发

摘要 随着计算机技术与信息处理技术迅速发展&#xff0c;智能化电子设备逐渐进入到日常的生产和生活中&#xff0c;与此同时&#xff0c;人们对电子设备操作过程的便捷化也提出了新的要求&#xff0c;这也促使计算机进行图像处理的技术也得到了发展。近些年兴起的模式识别技术…