Retrofit-多个具有相同名称的查询参数,其中名称是动态设置的

Retrofit-多个具有相同名称的查询参数,其中名称是动态设置的,第1张

Retrofit-多个具有相同名称的查询参数,其中名称是动态设置的

感谢@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);


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5498598.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-13

发表评论

登录后才能评论

评论列表(0条)

    保存