You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

URLEncodedUtils.parse解析重定向URI出错,首个条目为URL本身

问题原因

你误用了URLEncodedUtils.parse()的参数——这个方法的第一个参数是表单编码的查询参数字符串(即URL中?之后的部分),而非完整URL。直接传入完整URL时,它会把整个字符串按=分割解析,自然会出现将https://my.redirect.de/foo?code当作参数名的错误结果。

解决方法

方法1:手动提取查询字符串后解析

先拆分完整URL,提取?之后的查询部分再传入方法:

String redirectedTo = "https://my.redirect.de/foo?code=123&state=123";
int queryIndex = redirectedTo.indexOf('?');
List<NameValuePair> params = Collections.emptyList();
if (queryIndex != -1) {
    String queryStr = redirectedTo.substring(queryIndex + 1);
    params = URLEncodedUtils.parse(queryStr, Charset.defaultCharset());
}

方法2:用URIBuilder解析完整URL(推荐)

借助Apache HttpClient的URIBuilder可以更稳妥地处理完整URL,自动识别查询参数,还能兼容无参数的URL场景:

URI uri = new URIBuilder("https://my.redirect.de/foo?code=123&state=123").build();
// 方式1:结合URLEncodedUtils解析
List<NameValuePair> params = URLEncodedUtils.parse(uri, Charset.defaultCharset().name());

// 方式2:直接从URIBuilder获取参数
List<NameValuePair> params = new URIBuilder(uri).getQueryParams();
补充说明

URLEncodedUtils的设计定位是解析application/x-www-form-urlencoded格式的字符串(比如POST表单数据、URL查询串),而非完整URL。使用URIBuilder能避免手动拆分URL时可能出现的边缘问题(比如URL中包含多个?、特殊字符编码等),是更可靠的方案。

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:40:10