美文网首页
retrofit一瞥

retrofit一瞥

作者: reminia | 来源:发表于2016-06-24 20:02 被阅读42次

    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一瞥

          本文链接:https://www.haomeiwen.com/subject/omnodttx.html