需要注意的是:下面说的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/";
请求方式: