基于字符串URL发起Get请求时遇数组类型错误的技术咨询
问题原因
你遇到的“期望数组类型但未找到”错误,根源在于forEach循环中的row是表格行对象,不是数组索引:
- 在
rows.forEach(row -> {...})里,row代表的是集合中的单个表格行实例(比如POI的Row对象),是一个对象类型,不是整数类型的索引。 - 而你调用
getRequest(queryParamsList[row])时,试图用row作为数组/列表的下标,编译器期望这里是一个int类型的索引,但实际传入的是Row对象,类型完全不匹配,所以抛出了这个错误。
另外还有个小细节:你生成的URL是存在urls列表里的,但调用getRequest时却用了queryParamsList,如果这两个列表不是一一对应的,也会导致逻辑错误哦。
解决方法
根据你的需求,有两种简单的修复方式:
方式一:在forEach中直接使用生成的URL
既然你在forEach里已经生成了对应的URL,直接把这个URL传给getRequest就好,完全不需要用索引:
final String URL_CORE = "/test/platform/auth"; List<String> urls = new ArrayList<>(); rows.forEach(row -> { final String clientValue = row.getCell("client"); final String uriValue = row.getCell("uri"); final String typeValue = row.getCell("type"); // 先把生成的URL存到变量里 String url = URL_CORE + "?" + (clientValue.isEmpty() ? "" : CLIENT + "=" + clientValue + "&") + (uriValue.isEmpty() ? "" : URI + "=" + uriValue + "&") + (typeValue.isEmpty() ? "" : TYPE + "=" + typeValue); urls.add(url); // 直接用生成的url调用getRequest getRequest(url); });
注意:我帮你补全了isEmpty()的括号,Java里字符串判空是方法调用哦,clientValue.isEmpty会编译报错的
方式二:改用普通for循环(需要索引时)
如果你确实需要用到索引(比如要关联queryParamsList里的对应元素),可以放弃forEach,改用普通的for循环:
final String URL_CORE = "/test/platform/auth"; List<String> urls = new ArrayList<>(); for (int i = 0; i < rows.size(); i++) { Row row = rows.get(i); final String clientValue = row.getCell("client"); final String uriValue = row.getCell("uri"); final String typeValue = row.getCell("type"); String url = URL_CORE + "?" + (clientValue.isEmpty() ? "" : CLIENT + "=" + clientValue + "&") + (uriValue.isEmpty() ? "" : URI + "=" + uriValue + "&") + (typeValue.isEmpty() ? "" : TYPE + "=" + typeValue); urls.add(url); // 这里用索引i访问queryParamsList的对应元素 getRequest(queryParamsList.get(i)); }
额外小建议:生成URL时如果所有参数都不为空,末尾会多一个&,可以用StringBuilder或者流式处理来优化参数拼接,避免这种无效字符的出现~
内容的提问来源于stack exchange,提问作者BruceyBandit
相关产品推荐
相关产品推荐

