Retrofit源码解析之POST、GET请求

需要注意的是:下面说的GET请求和POST请求里面的@的方法,不是说只属于它们自己,灵活点。比如@path既适用于@GET也适用于@POST

GET请求(获取资源)

  • 用来请求访问已被URI识别的资源,指定的资源经服务端解析后返回响应内容。对于Retrofit2.0中的Get请求:
@Url
作用:直接传入一个请求的 URL变量 用于URL设置
具体使用:
public interface MyService {
        @GET
        Call<Bean> getInfo(@Url String url, @Query String("name") String name);
       // 当有URL注解时,@GET传入的URL就可以省略
       // 当GET、POST...HTTP等方法中没有设置Url时,则必须使用 {@link Url}提供

}
@path 动态更改位于URL中的路径
public interface MyService {
        @GET("api/{page}")
        Call<Bean>  getInfo(@Path("page") String page);
        // 访问的API是:www.baidu.com/api/{page}
        // 在发起请求时, {user} 会被替换为方法的第一个参数 user(被@Path注解作用)
    }
使用 @QuerryMap 或者@Querry

HTTP请求的完整URL是:www.baidu.com/api?name=allen&sex=male&food=apple

基础URL:

BaseUrl = "www.baidu.com/";

请求方式:

public interface MyService {

//第一种
@GET("api? ")
Call<Bean> getInfo(@Query String("name") String name,
                                 @Query("sex") String sex,
                                 @Query("food") String food);

//第二种和第一种是一样的
@GET("api? ")
Call<Bean> getInfo(@QueryMap HashMap<String,String> map);
    }

网络请求:

//第一种
Call<Bean> call = MyService .getInfo( "allen","male","apple");
   call.enqueue(new Callback<Bean>() {
    ......
    .........
    ...............

   });

//第二种
HashMap<String, String> myHashMap = new HashMap<>();
myHashMap .put ("name", allen);
myHashMap .put ("sex", male);
myHashMap .put ("food", apple);
Call<Bean> call = MyService .getInfo(myHashMap);
   call.enqueue(new Callback<Bean>() {
    ......
    .........
    ...............

   });

POST请求(传输实体主体)

四种常见的 POST 提交数据方式对应的content-type取值
- POST请求一般分为两种传输实体到后台,表单和JSON

使用表单 @FieldMap 或者@Field

HTTP请求的完整URL是:www.baidu.com/api
通过表单提交,注意的是传输的时候表单需要进行UrlEncode编码
参数Parameters为name,Vaule为allen。
参数Parameters为sex,Vaule为male。
基础URL:

BaseUrl = "www.baidu.com/";

请求方式:

public interface MyService {

//第一种
@FormUrlEncoded
@POST("api")
Call<Bean> getPerson(@Field("name") String name,@Field("sex") String sex);

//第二种和第一种是相同的
@FormUrlEncoded
@POST("api")
Call<Bean> getPerson(@FieldMap HashMap<String,String> map);

    }

网络请求:

//第一种
Call<Bean> call = MyService .getPerson( "allen","male");
   call.enqueue(new Callback<Bean>() {
    ......
    .........
    ...............

   });

//第二种
HashMap<String, String> myHashMap = new HashMap<>();
myHashMap .put ("name", allen);
myHashMap .put ("sex", male);
Call<Bean> call = MyService .getPerson(myHashMap);
   call.enqueue(new Callback<Bean>() {
    ......
    .........
    ...............

   });
直接使用表单 @Part 或者@PartMap

HTTP请求的完整URL是:www.baidu.com/api
通过表单提交,一般用于文件的上传。
参数Parameters为name,Vaule为allen。
参数Parameters为sex,Vaule为male。
基础URL:

BaseUrl = "www.baidu.com/";

请求方式:

参考资料:
这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值