【问题标题】:Why is retrofit reordering my QueryMap params?为什么改造会重新排序我的 QueryMap 参数?
【发布时间】:2020-08-31 17:50:36
【问题描述】:

我正在尝试像这样查询 github api...

https://api.github.com/search/repositories?q=created:>=2015-07-11&sort=stars&order=desc&perpage=25&page=1

这是我的 GET

    @GET("/search")
    public void getTrending(@QueryMap Map<String,String> filters,Callback<GitResponse> response);

这是我设置查询地图的方式...

    Map<String,String> searchFilters = new HashMap<>();
    searchFilters.put("created>","2015-07-11");
    searchFilters.put("sort","stars");
    searchFilters.put("order","desc");
    searchFilters.put("perpage","25");
    searchFilters.put("page", "1");


   api.getTrending(Collections.unmodifiableMap(searchFilters), new Callback<GitResponse>() {
       @Override
       public void success(GitResponse gitResponse, Response response) {
           Log.e("tag",response.toString());
       }

       @Override
       public void failure(RetrofitError error) {
           Log.e("tag",error.toString());
       }
   });

这是通过改造格式化的网址。

https://api.github.com/search/repositories?order=desc&created>=2015-07-11&perpage=25&sort=stars&page=1

请注意,参数的顺序没有保留。我需要 created &gt;= 作为查询正常工作的第一个参数。我尝试使用Collections.unmodifiableMap(),但这并没有帮助。在retrofit docs 中,他们使用的是番石榴的ImmutableMap.of()。我必须使用番石榴来保留订单吗?

【问题讨论】:

    标签: android retrofit github-api


    【解决方案1】:

    这个问题根本与改造无关。您有浮动订单,因为java.util.HashMap 不保证订单。您应该使用LinkedHashMap 来获取固定元素顺序。

    顺便说一下,你最好了解一下 hash map 的工作原理。

    【讨论】:

      【解决方案2】:

      也许我来晚了,但无论如何...... :)

      命名参数的要点是顺序无关紧要。如果重要,服务器有故障。 您的主要问题似乎是参数的名称不是“创建”的。是“q”。 “创造”是价值的一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多