Java中不解析URL获取查询参数详情报错求助
URL查询参数处理触发URISyntaxException错误
我想从URL中提取查询参数的名称和值,但有个限制:不能通过解析URL的方式获取这些信息。我尝试先找到?的索引再截取子串处理查询参数,用了这段代码:
String query = uri.getQuery() == null || uri.getQuery().trim().isEmpty() ? "" : uri.getQuery();
结果触发了错误:
java.net.URISyntaxException: Illegal character in query at index
我用的URL是:
https://xyzz.com.in/collections/two-tone-wedding-rings?ugg_9ty554_tags=ROSE|WHITE&ugg_yuiolz_price=%3A700%201000%20%7B0%7D%20-%20%7B1%7D
(其中|符号是问题根源)
请问我哪里错了?
你的问题出在用URI.getQuery()本身就属于解析URL的操作,而URI类对查询参数里的非法字符(比如|,它属于未编码的保留字符)会严格校验,直接调用getQuery()会触发语法异常,这也和你“不能解析URL”的限制冲突了。
按照你的思路,应该直接把URL当作普通字符串处理,跳过URI/URL类的解析步骤:
- 把整个URL作为字符串,找到
?的索引位置 - 如果存在
?,就截取?之后的子串作为查询参数部分 - 再对这个子串进行分割处理(按
&分割键值对,再按=分割名称和值)
示例代码:
String urlStr = "https://xyzz.com.in/collections/two-tone-wedding-rings?ugg_9ty554_tags=ROSE|WHITE&ugg_yuiolz_price=%3A700%201000%20%7B0%7D%20-%20%7B1%7D"; String query = ""; int queryStartIndex = urlStr.indexOf('?'); if (queryStartIndex != -1 && queryStartIndex < urlStr.length() - 1) { query = urlStr.substring(queryStartIndex + 1); } // 后续处理query,分割键值对 if (!query.isEmpty()) { String[] paramPairs = query.split("&"); for (String pair : paramPairs) { String[] keyValue = pair.split("=", 2); String key = keyValue[0]; String value = keyValue.length > 1 ? keyValue[1] : ""; // 如需解码URL编码字符,可调用下方方法(无需解析整个URL) // value = java.net.URLDecoder.decode(value, java.nio.charset.StandardCharsets.UTF_8); System.out.println("参数名:" + key + ",参数值:" + value); } }
注意:如果需要处理URL编码的字符(比如%3A对应:,%20对应空格),可以用URLDecoder.decode()方法,这一步只是对字符串做解码处理,并不涉及URL解析,符合你的限制。
内容的提问来源于stack exchange,提问作者MadagascarPenguin
相关产品推荐
相关产品推荐

