【Retrofit】网络请求参数@Path、@Query、@QueryMap、@Body、@Field、@FieldMap用法

  • 原文:https://www.aliyun.com/jiaocheng/21558.html

  • 摘要:最近开始在项目中使用Retrofit,在这里总结一下Retrofit网络请求参数@Path、@Query、@QueryMap、@Body、@Field、@FieldMap用法初始化RetrofitRetrofitretrofit=newRetrofit.Builder().baseUrl("https://fanyi-api.baidu.com/").addConverterFactory(GsonConverterFactory.create()).bu

  • 最近开始在项目中使用Retrofit,在这里总结一下Retrofit网络请求参数@Path、@Query、@QueryMap、@Body、@Field、@FieldMap用法


    初始化Retrofit 


    Retrofit retrofit =newRetrofit.Builder()


    .baseUrl("https://fanyi-api.baidu.com/")


    .addConverterFactory(GsonConverterFactory.create())


    .build();


    GET 

    样式1(一个简单的get请求)

    http://192.168.1.1/api/News


    @GET("News")


    Call  getItem();


    样式2(URL中有参数)

    http://192.168.1.1/api/News/1

    http://192.168.1.1/api/News/{资讯id}


    @GET("News/{newsId}")


    Call getItem(@Path("newsId")String newsId);



    http://192.168.1.1/api/News/1/类型1

    http://192.168.1.1/api/News/{资讯id}/{类型}


    @GET("News/{newsId}/{type}")


    Call getItem(@Path("newsId")String newsId, @Path("type")String type);


    样式3(参数在URL问号之后)

    http://192.168.1.1/api/News?newsId=1

    http://192.168.1.1/api/News?newsId={资讯id}


    @GET("News")


    Call getItem(@Query("newsId") String newsId);


    http://192.168.1.1/api/News?newsId=1&;type=类型1

    http://192.168.1.1/api/News?newsId={资讯id}&;type={类型}


    @GET("News")


    Call getItem(@Query("newsId") String newsId, @Query("type") String type);


    样式4(多个参数在URL问号之后,且个数不确定)

    http://192.168.1.1/api/News?newsId=1&;type=类型1...

    http://192.168.1.1/api/News?newsId={资讯id}&;type={类型}...


    @GET("News")


    Call getItem(@QueryMap Map map);


    也可以


    @GET("News")


    Call getItem(@Query("newsId")String newsId,@QueryMap Map map);


    POST

    样式1(需要补全URL,post的数据只有一条reason)

    http://192.168.1.1/api/Comments/1

    http://192.168.1.1/api/Comments/{newsId}


    @FormUrlEncoded


    @POST("Comments/{newsId}")


    Call reportComment(@Path("newsId") String commentId,@Field("reason") String reason);


    样式2(需要补全URL,问号后加入access_token,post的数据只有一条reason)

    http://192.168.1.1/api/Comments/1?access_token=1234123

    http://192.168.1.1/api/Comments/{newsId}?access_token={access_token}


    @FormUrlEncoded


    @POST("Comments/{newsId}")


    Call reportComment(@Path("newsId") String commentId,@Query("access_token") String access_token,@Field("reason") String reason);


    样式3(需要补全URL,问号后加入access_token,post一个body(对象))

    http://192.168.1.1/api/Comments/1?access_token=1234123

    http://192.168.1.1/api/Comments/{newsId}?access_token={access_token}


    @POST("Comments/{newsId}")


    Call reportComment(@Path("newsId") String commentId, @Query("access_token") String access_token,@Body CommentBean bean);


    DELETE

    样式1(需要补全URL)

    http://192.168.1.1/api/Comments/1

    http://192.168.1.1/api/Comments/{newsId}

    {access_token}


    @DELETE("Comments/{commentId}")


    Call deleteNewsCommentFromAccount(@Path("commentId") String commentId);


    样式2(需要补全URL,问号后加入access_token)

    http://192.168.1.1/api/Comments/1?access_token=1234123

    http://192.168.1.1/api/Comments/{newsId}?access_token={access_token}


    @DELETE("Comments/{commentId}")


    Call deleteNewsCommentFromAccount(@Path("accountId")String accountId,        @Query("access_token")String access_token);


    PUT(这个请求很少用到,例子就写一个)

    http://192.168.1.1/api/Accounts/1

    http://192.168.1.1/api/Accounts/{accountId}


    @PUT("Accounts/{accountId}")


    Call updateExtras(@Path("accountId")String accountId,        @Query("access_token")String access_token, @Body ExtrasBean bean);


    总结

    @Path:所有在网址中的参数(URL的问号前面),如:

    http://192.168.1.1/api/Accounts/{accountId}

    @Query:URL问号后面的参数,如:

    http://192.168.1.1/api/Comments?access_token={access_token}

    @QueryMap:相当于多个@Query

    @Field:用于POST请求,提交单个数据

    @FieldMap:以map形式提交多个Field(Retrofit2.0之后添加)

    @Body:相当于多个@Field,以对象的形式提交

    TIps

    Tip1

    使用@Field时记得添加@FormUrlEncoded

    Tip2

    若需要重新定义接口地址,可以使用@Url,将地址以参数的形式传入即可。

    Tip3

    @Path 和@Query的区别

    相同点:都是请求头中的带有的数据

    不同点:前者是请求头中问号之前用于替换URL中变量的字段,后者是请求头问号之后用于查询数据的字段,作用和应用场景都不同

猜你喜欢

转载自blog.csdn.net/weixin_40350174/article/details/80895542