轻松搞定Retrofit不同网络请求方式的请求参数配置,Retrofit常用注解的使用

简介: 《一》四种网络请求方式:GET : 向服务器发起数据请求,获取信息。类似于数据库的select操作,只是查询,不会影响资源的内容。POST : 向服务器发送数据,该请求会改变数据的种类等资源。

《一》四种网络请求方式:

  • 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为上传的文件绝对路径
        //构建body
        RequestBody requestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file))
                .build();

3、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);

4、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网络请求参数注解
Retrofit常用注解解释

相关文章
|
3月前
|
人工智能 运维 安全
配置驱动的动态 Agent 架构网络:实现高效编排、动态更新与智能治理
本文所阐述的配置驱动智能 Agent 架构,其核心价值在于为 Agent 开发领域提供了一套通用的、可落地的标准化范式。
735 54
|
3月前
|
人工智能 安全 数据可视化
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
本文系统性地提出并阐述了一种配置驱动的独立运行时Agent架构,旨在解决当前低代码/平台化Agent方案在企业级落地时面临困难,为Agent开发领域提供了一套通用的、可落地的标准化范式。
402 18
配置驱动的动态Agent架构网络:实现高效编排、动态更新与智能治理
|
2月前
|
网络协议 Linux 虚拟化
配置VM网络:如何设定静态IP以访问主机IP和互联网
以上就是设定虚拟机网络和静态IP地址的基本步骤。需要注意的是,这些步骤可能会因为虚拟机软件、操作系统以及网络环境的不同而有所差异。在进行设定时,应根据具体情况进行调整。
331 10
|
2月前
|
弹性计算 安全 应用服务中间件
阿里云渠道商:怎么配置阿里云网络ACL?
阿里云网络ACL是子网级无状态防火墙,支持精准流量控制、规则热生效且免费使用。本文详解5步配置流程,助您实现Web与数据库层的安全隔离,提升云上网络安全。
|
10月前
|
机器学习/深度学习 移动开发 测试技术
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
441 1
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
|
6月前
|
安全 网络虚拟化 数据安全/隐私保护
配置小型网络WLAN基本业务示例
本文介绍了通过AC与AP直连组网实现企业分支机构移动办公的WLAN基本业务配置方案。需求包括提供名为“WiFi”的无线网络,分配192.168.1.0/24网段IP地址给工作人员,采用直连二层组网方式,AC作为DHCP服务器,并使用隧道转发业务数据。配置步骤涵盖AP与AC间CAPWAP报文传输、DHCP服务设置、AP上线及WLAN业务参数配置等,最终确保STA成功接入无线网络“WiFi”。
配置小型网络WLAN基本业务示例
|
6月前
|
监控 安全 网络安全
网络安全新姿势:多IP配置的五大好处
服务器配置多IP地址,既能提升网络速度与安全性,又能实现多站点托管和故障转移。本文详解多IP的五大妙用、配置方法及进阶技巧。从理论到实践,合理规划IP资源,让服务器性能跃升新高度。
209 2
|
10月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR LSKNet (附网络详解和完整配置步骤)
RT-DETR改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR LSKNet (附网络详解和完整配置步骤)
388 13
RT-DETR改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR LSKNet (附网络详解和完整配置步骤)
|
10月前
|
机器学习/深度学习 编解码 数据可视化
RT-DETR改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR ConvNeXt V2 (附网络详解和完整配置步骤)
RT-DETR改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR ConvNeXt V2 (附网络详解和完整配置步骤)
726 11
RT-DETR改进策略【Backbone/主干网络】| 替换骨干网络为2023-CVPR ConvNeXt V2 (附网络详解和完整配置步骤)

热门文章

最新文章