Retrofit 2.0 接口注解和常用接口方法

  1. @Get 基本注解

    @GET("blog/{id}") //这里的{id} 表示是一个变量
    Call<ResponseBody> getBlog(/** 这里的id表示的是上面的{id} */@Path("id") int id);
    
  2. @Http 全名注解

    /**
     * method 表示请求的方法,区分大小写,retrofit 不会做处理
     * path表示路径
     * hasBody表示是否有请求体
     */
    @HTTP(method = "GET", path = "blog/{id}", hasBody = false)
    Call<ResponseBody> getBlog(@Path("id") int id);
    
  3. @Post :

    /**
     * {@link FormUrlEncoded} 表明是一个表单格式的请求(Content-Type:application/x-www-form-urlencoded)
     * <code>Field("username")</code> 表示将后面的 <code>String name</code> 中name的取值作为 username 的值
     */
    @POST("/form")
    @FormUrlEncoded
    Call<ResponseBody> testFormUrlEncoded1(@Field("username") String name, @Field("age") int age);
    
    /**
     * Map的key作为表单的键
     */
    @POST("/form")
    @FormUrlEncoded
    Call<ResponseBody> testFormUrlEncoded2(@FieldMap Map<String, Object> map);
    
  4. @Headers 和 @Header

    @GET("/headers?showAll=true")
    @Headers({"CustomHeader1: customHeaderValue1", "CustomHeader2: customHeaderValue2"})
    Call<ResponseBody> testHeader(@Header("CustomHeader3") String customHeaderValue3);
    

    @Headers : 用在方法上面,请求的时候添加固定的 Header 值

    @Header : 只能用在方法参数中,可以动态的传递 Header 参数

  5. @Query 和 @QueryMap

    /**
     * 当GET、POST...HTTP等方法中没有设置Url时,则必须使用 {@link Url}提供
     * 对于Query和QueryMap,如果不是String(或Map的第二个泛型参数不是String)时
     * 会被默认会调用toString转换成String类型
     * Url支持的类型有 okhttp3.HttpUrl, String, java.net.URI, android.net.Uri
     * {@link retrofit2.http.QueryMap} 用法和{@link retrofit2.http.FieldMap} 用法一样,不再说明
     */
    @GET //当有URL注解时,这里的URL就省略了
    Call<ResponseBody> testUrlAndQuery(@Url String url, @Query("showAll") boolean showAll);
    

    当@GET、POST...HTTP等注解中没有设置Url时,则必须在方法参数中使用 @Url 来提供 Url

    @Query 和 @QueryMap 会自动当成参数来拼接 Url

  6. @Body

    @POST("blog")
    Call<Result<Blog>> createBlog(@Body Blog blog);
    

    当参数比较多的时候,一种是使用 @FieldMap 注解,一种是使用 @Body 传递一个对象,当对象作为参数的时候,需要在 Retrofit 配置一个转换器,例如下面,这样就会自动把这个对象进行一次转换放到 request 的 body 里传过去

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://localhost:4567/")
            //可以接收自定义的Gson,当然也可以不传
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();
    

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 写在前面 本篇文章基于retrofit-2.1进行分析. 1. 各个注解的含义及使用 1.1 Body注解: 作用...
    NeWolf阅读 5,353评论 0 1
  • 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,现在已...
    Android开发__落岑阅读 5,763评论 0 2
  • 安卓开发领域中,很多重要的问题都有很好的开源解决方案,例如Square公司提供网络请求 OkHttp , Retr...
    aaron688阅读 5,902评论 1 20
  • Android 网路请求框架 一、RetrofitService 详细方法 1.retrofit注解 方法注解:@...
    Demon鑫阅读 3,276评论 0 3
  • 前一阵子《芈月传》火了整个荧屏,不少女观众都钟情于黄歇这个情话boy,“月儿是好看的”、“月儿就是子歇的性命”、“...
    有宠阅读 2,761评论 0 0