【问题标题】:Retrofit - use query parameter with prefix改造 - 使用带前缀的查询参数
【发布时间】:2023-03-26 00:19:01
【问题描述】:

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

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:”。有人能告诉我如何正确地做到这一点吗?

【问题讨论】:

  • 你可以通过9788087270431而不是"isbn:".concat("9788087270431")
  • 正如我所说的“但我必须使用前缀 'isbn:'” 我只是想知道是否有任何方法不将“isbn:”放到每个查询中
  • 不,我知道。查询是一组由 = 分隔的键/值对

标签: android retrofit


【解决方案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

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

【讨论】:

  • 是的,我命名它是因为我打算只查询 ISBN。好的,我会让它保持原样并接受。感谢开闭校长,之前没听说过
  • 你应该阅读SOLID principles
猜你喜欢
  • 2018-02-11
  • 2019-05-15
  • 1970-01-01
  • 2016-08-12
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多