轻松搞定Retrofit不同网络请求方式的请求参数配置,及常用注解使用
《一》四种请求方式:
GET
向服务器发起数据请求,获取信息。类似于数据库的select操作,只是查询,不会影响资源的内容。
POST
向服务器发送数据,该请求会改变数据的种类等资源。类似于数据库的insert操作,会创建新的内容。
DELETE
用来删除某一个资源。类似于数据库的delete操作。
PUT
向服务器发送数据,从而改变信息。类似于数据库的update操作,用来修改内容。
《二》Retrofit通过注解的方式,配置不同的网络请求。主要涉及到@Path、@Query、@QueryMap、@Body、@Field的用法等。
假设你的BASE_URL = "http://192.168.0.1/"
1、GET请求:
(1)情形一:@Query仅带查询参数:http://192.168.0.1/weather?city=北京
@GET("weather")Observable<WeatherEntity> getWeather(@Query("city") String city);
复制代码
(2)情形二:@Path请求参数直接跟在请求路径下:http://192.168.0.1/weather/北京
@GET("weather/{city_name}")Observable<Object> getWeather(@Path("city_name") String city_name);
复制代码
(3)情形三:@Path和@QueryMap结合 此种情形用得比较少:http://192.168.0.1/weather/北京?user_id=1&user_name=jojo
@GET("weather/{city_name}")Observable<Object> getWeather(@Path("city_name")String city_name, @QueryMap Map<String, String> queryParams);
复制代码
HashMap<String, String> queryParams= new HashMap<>();hashMap.put("user_id","1");hashMap.put("user_name","jojo");
复制代码
2、POST请求:
(1)情形一: http://192.168.0.1/comment
body参数:{"comment_id":"1","content":"我是评论","user_id":"1001"}
@Filed 方式处理
@FormUrlEncoded //使用@Field时记得添加@FormUrlEncoded@POST("comment")void doComments(@Field("comment_id")String comment_id, @Field("content")String content, @Field("user_id") String user_id);
复制代码
@FieldMap 方式处理
@FormUrlEncoded@POST("comment")void doComments(@FieldMap Map<String, String> paramsMap );
复制代码
通过键值对,以表单的形式提交:
HashMap<String, String> hashMap = new HashMap<>();hashMap.put("comment_id","1");hashMap.put("content","我是评论");hashMap.put("user_id","1001");
复制代码
@Body方式处理
@POST("comment")void doComments(@Body Object reqBean);
复制代码
@POST("comment")void doComments(@Body List<Object> requestList);
复制代码
(2)情形二:Retrofit文件上传: http://192.168.0.1/upload/
/*** 文件上传*/@POST("upload/")Observable<Object> uploadFile(@Body RequestBody requestBody);
复制代码
只不过文件上传传入的是RequestBody类型,下面是构建RequestBody的方式:
File file = new File(mFilePath); //mImagePath为上传的文件绝对路径//构建bodyRequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file)).build();
复制代码
1、PUT请求:
(1)情形一:http://192.168.0.1/comment/88
@PUT("comment/{comment_id}")void comment(@Path("comment_id") String comment_id);
复制代码
(2)情形二:http://192.168.0.1/comment/88?user_id=1001
@PUT("comment/{comment_id}")void comment(@Path("comment_id") String comment_id @Query("user_id") String user_id);
复制代码
(3)情形三:http://192.168.0.1/comment/88?user_id=1001 加body参数:{"content":"我是评论","type":"1"}
此类请求的应用场景:适合于body中需要传入多个请求参数,这样可以将多个请求的参数字段封装到一个实体中,这样就不用写多个@Filed了。
public class RequestBean {public String content;public String type;//实际中可能还有多个请求字段
}
复制代码
RequestBean requestBean = new RequestBean();requestBean .content = "我是评论";requestBean .type = "1";
复制代码
@PUT("comment/{comment_id}")void comment(@Path("comment_id") String comment_id @Query("user_id") String user_id @Body RequestBean reqBean);
复制代码
1、DELETE请求:
假如删除评论:http://192.168.0.1/comment/88
@DELETE("comment/{comment_id}")void comment(@Path("comment_id") String comment_id);
复制代码
其他可能的delete请求,配置方式都是类似的,这里就不多举例了。主要是要好好理解下面这些常用的请求参数注解的作用和用法。 综上所述,可以归纳出上面几个注解的用法: @Path : 请求的参数值直接跟在URL后面时,用@Path配置 @Query: 表示查询参数,以?key1=value1&key2=value2的形式跟在请求域名后面时使用@Query @QueryMap :以map的方式直接传入多个键值对的查询参数 @Field: 多用于post请求中表单字段,每个@Field后面,对应一对键值对。 @FieldMap :以map的方式传入多个键值对,作为body参数 @Body: 相当于多个@Field,以对象的形式提交
注意:Filed和FieldMap需要FormUrlEncoded结合使用,否则会抛异常!
更多配置URL请求路径的注解的了解可以参考: [Retrofit网络请求参数注解](https://blog.csdn.net/jdsjlzx/article/details/52015347) [Retrofit常用注解解释](https://blog.csdn.net/jdsjlzx/article/details/52015347)
轻松搞定Retrofit不同网络请求方式的请求参数配置,及常用注解使用相关推荐
- 52讲轻松搞定网络爬虫(笔记)
52讲轻松搞定网络爬虫 模块一:爬虫基础原理 1.HTTP基本原理 请求 响应 2.Web网页基础 网页的组成--HTML.CSS.JS 节点树 CSS选择器 3. 了解爬⾍的基本原理 获取⽹⻚: 提 ...
- 轻松搞定JSONP跨域请求
轻松搞定JSONP跨域请求 一.同源策略 要理解跨域,先要了解一下"同源策略".所谓同源是指,域名,协议,端口相同.所谓"同源策略",简单的说就是基于安全考虑, ...
- 轻松搞定阿里OSS文件上传和图片下载
轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备 1.1 注册阿里云账号,并开通OSS存储服务 1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...
- 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul
通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...
- c# socket接收字符串_socket通信很难?这一文让你轻松搞定!
目录 概述 TCP/IP协议.UDP协议 Socket是什么 socket通信流程 socket编程php代码实战 php7进阶到架构师相关阅读 概述 这是关于php进阶到架构之php7核心技术与最佳 ...
- fastreport dll_报表如何连接到VistaDB嵌入式数据库?FastReport.Net轻松搞定
Vista数据库属于嵌入式数据库的类型.这些数据库与客户端服务器数据库的不同之处在于,它们被设计为作为文件嵌入客户端应用程序中.这样的基础的任务范围也将与数据库不同.通常,这些是仅在一个应用程序中使用 ...
- 9月20日云栖精选夜读 | 如何轻松搞定数据科学面试:Python&R语言篇
对于数据科学家来说,工作的一大部分都需要在交互式编程环境中对数据进行处理.分析和可视化. 在过去几年,R语言和Python成了进行数据科学中最炙手可热的两种语言.这两种语言各有优缺点,掌握这两种语言大 ...
- 读取、回收和重用:使用 Excel、XML 和 Java 技术轻松搞定报告,第 2 部分
本周您推脱老板的 #432 创新理由了吗?您是否尝试过推脱? 本系列的其他文章 读取.回收和重用:使用 Excel.XML 和 Java 技术轻松搞定报告,第 1 部分 有幸的是,您不必推脱.本系列的 ...
- Iphone手机企业邮箱设置 九步轻松搞定
Iphone手机企业邮箱设置 九步轻松搞定 随着IPhone4S.IPhone5.小米系列手机的爆棚热销,智能手机迅速成为我们生活必备品.智能手机的便捷性也是随时随地都能派上用场.轻便自不必说,电话沟 ...
最新文章
- 用python画小猪佩奇(非原创)
- 磁盘被占满 系统出现 no space left on 报错(block被占满/inode被占满)
- jquery file upload 后台收到的文件名中文乱码, filename中文乱码
- 三相逆变器双pi控制器参数如何调节_一分钟看懂维也纳三相整流器
- Typora入门基本教程
- java装箱与拆箱_【转】java 自动装箱与拆箱
- nginx linux 系统服务,把ngnix注册为linux服务 将Nginx设置为linux下的服务
- 分享一次学习中遇到的问题
- HTML自我介绍表格代码制作
- 电容在电路中的几种作用
- C++字母大小写转换
- Unsupported operation: dart:isolate is not supported on dart4web
- Java 编程技术大全(上)实战练习 cp1-cp3
- C++: 猴子选大王
- PADS打开.asc文件
- 关于dva框架的二三事
- java基础语法入门到类型转换问题,运算符,数据输入,数组,方法概述,Debug模式,以及10个小案例的详细介绍。
- egret的eui.List滚动
- 初心不改、“疫”别多日,盛会重启2022上海生物发酵展全新归来
- 当当网年中图书大促来了,全年买书最好时机
热门文章
- android 网络调试 源代码,一个步骤教你调试Android系统源代码
- ajax php计数,jQuery+PHP+Ajax动态数字统计展示实例
- 微型计算机显卡必须插在主板的,第一章 计算机基础知识(2)
- 启动ipython_ipython,_ipython 启动错误,ipython - phpStudy
- logback的使用和logback.xml详解
- 正则表达式之?、(?:pattern)、(?!pattern)、(?=pattern)理解及应用
- oracle中间件微信公众号,对TP5.1中间件融合微信公众号代码的优化
- 第十六届全国大学生智能车竞赛全国总决赛报名信息汇总
- 滴定数据处理结果分析
- 工科学生懂艺术,魔鬼神仙挡不住