动态添加没有值的查询参数到Retrofit请求

20

你可以像这样使用查询参数 请查看 - jamescodingnow
3个回答

44

来自Retrofit文档:

对于复杂的查询参数组合,可以使用Map

@GET("/group/{id}/users")
List<User> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);

我猜这会实现你想要达到的目的。


@QueryMap 不允许在没有值的情况下包含查询参数。从文档中可以看出:"值是 URL 编码的,如果为 null,则不会将查询参数包含在 URL 中"。 - Yuriy
1
空字符串怎么办? - WojciechKo
它生成带有等号符号的URL: https://myserver.com/setservices?service[100]=&service[10000]=&service[10]= 但服务器可以正确理解它。 - Yuriy

6
我找到了一种解决方法来实现这个。
@GET("/setservices{services_query}")
ServicesSetResponse setServices(@EncodedPath("services_query") String servicesQuery);

然后:
getService().setServices("?param1=val1&param2=val2" + "&services[10]&services[100000]&services[1000000]")

1
这个已经不存在了吗?如果你使用Path,它会抱怨并强制你使用Query - behelit
现在不工作 :C - Sergey

4
我们可以通过以下方式使用@QueryMap进行传递:
GET("/movies")
Call<List<Movies>> getMovies(
    @QueryMap Map<String, String> options
);

构建参数的方法如下:
Map<String, String> data = new HashMap<>();
data.put("director", "Haresh");
data.put("page", String.valueOf(2));

它将生成如下Url链接: http://your.api.url/movies?page=2&director=Haresh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接