【问题标题】:problems with operators in url in Retrofit 2Retrofit 2 中 url 中的操作符问题
【发布时间】:2018-03-15 00:23:48
【问题描述】:

我正在尝试学习如何使用 Retrofit2,这是我必须生成的 URL:

(baseUrl)/repositories?q=language:Python&sort=stars&page=1

这是我正在使用的方法:

Call<List<Repo>> javaRepos(
            @Query("language") String language,
            @Query("sort") String sort,
            @Query("page") int page
    );

我就是这样称呼它的:

Call&lt;List&lt;Repo&gt;&gt; call = client.javaRepos("Python", "stars", 1);

但是,这是我的代码生成的网址:

(baseUrl)/repositories?language=Python&amp;sort=stars&amp;page=1

区别在于:

  • q= 丢失;
  • language 后跟 = 而不是 :

如何使用@Query 参数(或任何其他方式,实际上)生成正确的网址?

【问题讨论】:

    标签: android rest url retrofit2


    【解决方案1】:

    您似乎误解了所需网址的查询字符串。

    q=language:Python&amp;sort=stars&amp;page=1 应该分解为三个键值对:

    • q - language:Python
    • sort - stars
    • page - 1

    请注意,第一个键是q 而不是language

    考虑到这一点,您的方法应该如下所示(您必须传递 "language:Python" 而不仅仅是 "Python" 作为第一个参数)。

    Call<List<Repo>> javaRepos(
            @Query("q") String language,
            @Query("sort") String sort,
            @Query("page") int page
    );
    

    【讨论】:

    • 嗯,这很尴尬,:)
    【解决方案2】:

    你需要根据这个链接使用Path注解:https://square.github.io/retrofit/2.x/retrofit/index.html?retrofit2/http/Path.html

    @GET("repositories?q=language:{lang}&sort={sort}&page={page}")
    Call<List<Repo>> javaRepos(@Path(value = "lang") String lang, @Path(value = "sort") String sort, @Path(value = "page") int page);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 2016-06-15
      • 2021-07-03
      • 2020-08-31
      • 1970-01-01
      相关资源
      最近更新 更多