在java中是否有用于解析url查询参数的等效库?
为了说明我想要的东西,我发送了一个代码示例:
use URI;
use URI::QueryParam;
$u = URI->new("http://www.google.com?a=b&c=d");
print $u->query,"\n"; # prints foo=1&foo=2&foo=3
for my $key ($u->query_param) {
print "$key: ", join(", ", $u->query_param($key)), "\n";
}
输出结果为:
a = b& c = d
a:b
c:d
我不想编写自己的查询片段解析函数。
答案 0 :(得分:1)
java.net.URL
和java.net.URI
出了什么问题?
答案 1 :(得分:1)
不完全是,但接近:
final URI uri = URI.create(inputString);
final String[] queryParams = uri.getQuery().split("&");
然后您再次在"="
queryParams
的每个元素上拆分。
注意:请勿直接使用URLDecoder
来解码查询片段的值;它会将+
转换为空格,which is wrong according to the URI spec(pchar
包含sub-delim
包含+
!)
一个接近的解决方案是:
URLDecoder.decode(param.replace("+", "%2b"), "UTF-8")
要进行编码,请使用Guava' UrlPathSegmentEscaper
。
演示:这个简单的主要内容:
public static void main(final String... args)
throws UnsupportedEncodingException, URISyntaxException
{
System.out.println(URLDecoder.decode("a+b", "UTF-8"));
System.out.println(new URI("http", "foo.bar", "/baz", "op=a+b", null));
System.out.println(new URI("http", "foo.bar", "/baz", "op=a b", null));
}
打印:
a b // WRONG!
http://foo.bar/baz?op=a+b
http://foo.bar/baz?op=a%20b