标签:
接口API服务代码
接口定义有以下的配置方式, 取决于接口的参数需求(使用注解方式标注请求模板接口)
// 可以直接在URL中指定参数 @GET("version/android/2.3.0?order=desc") Call<VersionInfoDTO> loadVersionInfo(); // 设置POST请求体 @POST("users/new") void createUser(@Body User user, Callback<User> cb); // 上传POST表单数据 @FormUrlEncoded @POST("user/edit") User updateUser(@Field("name") String name, @Field("age") int age); // 多文件/数据上传 @Multipart @PUT("/user/photo") Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description); //给当前请求添加Headers头信息 @Headers({ "Accept: application/vnd.github.v3.full+json", "User-Agent: Retrofit-Sample-App" }) @GET("version/android/2.3.0") Call<VersionInfoDTO> loadVersionInfo();
如果你不需要任何类型安全的响应,你可以把返回值指定为
Call<Response>
所有请求都需要一个请求方法注解并以相对URL路径作为参数。内建了5个注解:
Retrofit的Annotation包含请求方法相关的@GET、@POST、@HEAD、@PUT、@DELETA、@PATCH
而且这些方法的参数也可以有特殊的注解。
的@Path、@Field、@Multipart
@Path(“XXX”) 使用方法: {}中的表示待定参数,路径中的参数使用@Path(“XXX”)
@GET("/group/{id}/users") Call<User> groupList(@Path("id") int groupId);
// 可以添加占位符 @GET("news/before/{dateStr}") // 表示{dateStr}由函数参数决定 Call<NewsBeforeDTO> getNewsBefore(@Path("dateStr") String date); // dateStr要一致
@Query用于查询参数如同”?”作用
// 可以添加参数 @GET("version/android/2.3.0") Call<VersionInfoDTO> loadVersionInfo(@Query("order") String order);
@GET("/group/{id}/users") Call<User> groupList(@Path("id") int groupId, @Query("sort") String sort);
@QueryMap用于有多个查询参数
@GET("/group/{id}/users") Call<User> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
@Body请求体(主要是用于@POST方式)
@Field注明表单中的键,方法的参数就是值了
@FormUrlEncoded注明是表单提交
如果我们希望提交 form-encoded name/value ,我们可以使用@FormUrlEncoded 与 @FieldMap注解:
@FormUrlEncoded @POST("/some/endpoint") Call<SomeResponse> someEndpoint(@FieldMap Map<String, String> names);
@Multipart 如果你要提交多参数表单数据(multi-part form data),可以使用@Multipart与@Part注解:
@Multipart @POST("/some/endpoint") Call<SomeResponse> someEndpoint(@Part("name1") String name1, @Part("name2") String name2)
@Headers(“”)请求头设置
@Headers("Cache-Control: max-age=640000") @GET("/widget/list") Call<Widget> widgetList();
备注:可以通过 Interceptor 去为每个请求都设置相同的请求头
标签:
原文地址:http://www.cnblogs.com/zhiqixue/p/5433098.html