Android Retrofit 请求参数配置

一、请求方式

使用Retrofit可以进行GET,POST,PUT,DELETE等请求方式。

GET : 向服务器发起数据请求,获取信息。类似于数据库的select操作,只是查询,不会影响资源的内容。
POST : 向服务器发送数据,该请求会改变数据的种类等资源。类似于数据库的insert操作,会创建新的内容。
DELETE:用来删除某一个资源。类似于数据库的delete操作。
PUT : 向服务器发送数据,从而改变信息。类似于数据库的update操作,用来修改内容。

二、配置不同的网络请求

1、GET请求:

(1)情形一:

@Query
仅带查询参数:https://api.muxiaoguo.cn/api/mobile?phone=13429667827

 	@FormUrlEncoded
    @GET("api/mobile")
    Call<ResponseBody> doTest(@Query("phone") String phone;

(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();

综上所述,可以归纳出上面几个注解的用法:
@Path : 请求的参数值直接跟在URL后面时,用@Path配置
@Query: 表示查询参数,以?key1=value1&key2=value2的形式跟在请求域名后面时使用@Query
@QueryMap : 以map的方式直接传入多个键值对的查询参数
@Field: 多用于post请求中表单字段,每个@Field后面,对应一对键值对。
@FieldMap :以map的方式传入多个键值对,作为body参数
@Body: 相当于多个@Field,以对象的形式提交

转载自:https://www.jianshu.com/p/bca05b853c8c

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值