Retrofit - 使用带前缀的查询参数

时间:2015-11-11 21:16:32

标签: android retrofit

我有一个小问题,我想解决。我需要为以下请求创建改装服务

https://www.googleapis.com/books/v1/volumes?q=isbn:9788087270431

我的API目前看起来像:

public interface GoogleBooksApi {

    @GET("/books/v1/volumes")
    Call<BookResponse> getBooksByIsbn(@Query("q") String isbn);

}

但我每次都必须使用前缀“isbn:”。有人能告诉我如何正确地做到这一点吗?

1 个答案:

答案 0 :(得分:1)

这里的问题似乎是你误解了你对getBooks的调用所期望的实际参数。

@GET("/books/v1/volumes")
Call<BookResponse> getBooksByIsbn(@Query("q") String isbn);

实际应该是

@GET("/books/v1/volumes")
Call<BookResponse> getBooks(@Query("q") String query);

然后你可以通过以下调用将调用包装到API中:

public void findByIsbn(String isbn) {
    GoogleBooksApi api = restAdapter.create(GoogleBooksApi.class);
    String query = buildIsbnQuery(isbn);
    api.getBooks(query);
}

public String buildIsbnQuery(String isbn) {
    return String.format("isbn:%s");
}

这样,如果要求不再是ISBN,那么您不必更改api代码的实际功能,只需要添加一个额外的查询构建器方法,这使得它更加尊重open-closed principal

不建议更改改装代码,完全没有必要。