我正在尝试将一个旧项目迁移到Retrofit库,并且该项目具有相当棘手的API。所以我有一个这样的查询模板:
@GET(value = "products/search")
Single<ProductSearchResponse> productSearch();
我必须在以下模板的此处添加一些参数:
filter[attributeId]=attributeValueId
例如:
products/search?filter[1]=10&filter[1]=11&filter[2]=20&filter[2]=21
这就是API的工作方式,我无法更改。我知道我们可以将列表作为参数传递,如下所示:
@Query("filter") List<Integer> attributeValueIds
但是,如何动态设置参数名称呢?
感谢@ILLIA
DEREVIANKO(https://github.com/square/retrofit/issues/1324)发布的链接,我设法解决了此类问题:
public class ProxyRetrofitQueryMap extends HashMap<String, Object> {
public ProxyRetrofitQueryMap(Map<String, Object> m) {
super(m);
}
@Override
public Set<Entry<String, Object>> entrySet() {
Set<Entry<String, Object>> originSet = super.entrySet();
Set<Entry<String, Object>> newSet = new HashSet<>();
for (Entry<String, Object> entry : originSet) {
String entryKey = entry.getKey();
if (entryKey == null) {
throw new IllegalArgumentException("Query map contained null key.");
}
Object entryValue = entry.getValue();
if (entryValue == null) {
throw new IllegalArgumentException(
"Query map contained null value for key '" + entryKey + "'.");
}
else if(entryValue instanceof List) {
for(Object arrayValue:(List)entryValue) {
if (arrayValue != null) { // Skip null values
Entry<String, Object> newEntry = new AbstractMap.SimpleEntry<>(entryKey, arrayValue);
newSet.add(newEntry);
}
}
}
else {
Entry<String, Object> newEntry = new AbstractMap.SimpleEntry<>(entryKey, entryValue);
newSet.add(newEntry);
}
}
return newSet;
}
}
这样我们就可以使用一个映射,其中key是唯一的参数名称,value是一个字符串列表,它是此参数的值。像这样:
ProxyRetrofitQueryMap map = new ProxyRetrofitQueryMap();
List<String> values1 = new ArrayList<>();
values1.add("10");
values1.add("11");
map.put("filter[1]", values1);
List<String> values2 = new ArrayList<>();
values1.add("20");
values1.add("21");
map.put("filter[2]", values2);
问题内容: 假设我有一个Helper类,如下所示: 并且是将被设置一次,在构造函数的变量。 不是,因此我可以使用来区分变量和参数。 另一方面,是。在涉及静态变量时,是否有任何方法可以将其与参数区分开? 问题答案: 尽管不建议通过构造函数设置静态变量的值,但可以使用。
如何在flutter中发送具有相同名称参数的多个数据。在PHP中,我们使用参数[],然后我们可以发送多个数据,但我是新来的flutter,所以我想知道如何做到这一点 示例图像:https://i.stack.imgur.com/X7jL3.png
问题内容: 我是Swift的新手,我已经遍历了一些教程,其中许多教程使用同一个名称多次定义了一个函数。 我已经习惯了其他编程语言,否则将无法执行此操作。 因此,我检查了官方的Swift手册,还检查了override关键字,以了解可以得到的结果,但是仍然无法理解以下代码: 从我看到的函数tableView设置在第1行和第5行,我注意到的唯一区别是第一个tableView函数返回,而第二个函数返回(U
问题内容: 想知道是否有人在使用新功能通过PHP 5.3对类进行命名空间时是否遇到了此问题。 我正在使用单独的类来生成动态类调用,以在应用程序中定义用户类型。基本上,类定义器采用类型的整数表示形式并解释它们,返回一个包含要用作该用户模型的类名的字符串。 我在全局范围内定义了具有该名称的用户类型的对象模型,但是在Editor名称空间中,该用户的编辑器具有另一个名称相同的对象。由于某些原因,PHP不允
问题内容: 我有一个PHP应用程序,有时需要处理URL,其中URL中的多个参数具有相同的名称。是否有一种简单的方法来检索给定键的所有值?PHP $ _GET仅返回最后一个值。 具体来说,我的应用程序是一个OpenURL解析器,可能会获得如下URL参数: (是的,我知道这很丑陋,欢迎来到我的世界)。请注意,键“ rft_id”出现两次: 将返回just ,先前的值()已被覆盖。 我想同时访问这两个值
根据HTTP协议,发出包含多个同名参数的HTTP GET请求是否“合法”? 例如 还是不规范? 同样的问题适用于邮政。