retrofit一瞥

retrofit,这周采用的一个rest client库,在系统集成的时候用来从其他系统获取rest数据,使用起来非常简单方便。

retrofit可根据定义的api接口,发送http请求获取数据,数据会被指定的converter自动反序列化为对应的DTO(data template object)。由于大多数rest请求返回的数据都采用json格式,因此常用的converter为gson或jackson,这两个库提供了灵活的注解处理相应字段。下面以gson示例retrofit的使用。

class Book { // a DTO
  @SerializedName("name") //name based value put to title
  String title;
  String author;
  String year;
  String type; 
 //ignored getter and setters here...
}
class BookApiService{ //rest api
  @GET("v1/book/{id}")  //get method, request uri is v1/book/id
  public Call<Book> getBook(@Path("id")int id); //Call is like a future

  @GET("vi/books") //get method, request uri is vi/books?author=author&year=year
  public  Call<List<Book>> getBooks(@Query("author")String author, @Query("year")int year);

  @Headers("Content-Type: application/json")  //request headers
  @POST("v1/book/add") //post method, request uri is v1/book/add
  public Call<Book> addBook(@Body Book book, @Header("auth")String auth); //post request header with auth field, post data is a json format book
}

class BookService{  // retrofit service
  private Retrofit retrofit = new Retrofit.Builder().baseUrl("http://ip/").addConverterFactory(GsonConverterFactory().create()).build(); //base url is the start part of the rest uri , should be end with '/'
  private BookApiService service = retrofit.create(BookApiService.class);

  public Book getBook(int id){ //backend call this method to get book
    Call<Book> call = service.getBook(id);
    Response<Book> execute = call.execute();
    if(execute.isSuccessful()) { //if request success, make sure to judge success first
      return execute.body();
    } else{  //if request failed, bad request or internal server error...
      ResponseBody body = execute.errorBody(); //deal with error body
     ...
     return null; // or throw exception here
    }
  }
  // ignored other specified api method 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 相信很多人都在使用Retrofit,我也在用,但是对它的理解都不是太深刻,现在Retrofit2已经出来一段时间,...
    WHOKNOWME阅读 7,549评论 6 19
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,204评论 25 708
  • 不熟悉Retrofit的同学可以先参考这篇文章:Retrofit – Java(Android) 的REST 接口...
    LucasAdam阅读 1,474评论 3 3
  • 你痛苦过吗?到什么程度?夜里哭醒! 你痛苦过吗?到什么程度?夜不能寐! 你痛苦过吗?到什么程度?恨夜太长! 我想痛...
    微风的自由阅读 250评论 2 1
  • 鱼儿 作者: 大吕 鱼儿缸中游, 犹觉不自由。 夜半急跃起, 朝闻则槁矣。 我家的鱼缸里原本有三只小鱼儿,...
    大吕娘阅读 158评论 0 0