gpt4 book ai didi

java - 如何使用 Uri.Builder 将数组参数添加到 url?

转载 作者:太空宇宙 更新时间:2023-11-03 10:19:54 33 4
gpt4 key购买 nike

我需要生成一个带有数组参数的 url,或者看起来像这样:

?array_name[]=value1&array_name[]=value2

如何使用 Uri.Builder 实现这一点?以下代码:

Uri.Builder builder = new Uri.Builder();
builder.appendQueryParameter("array[]", "one");
builder.appendQueryParameter("array[]", "another");
String result = builder.build().toString();

给我这个输出:

?array%5B%5D=one&array%5B%5D=another

其中方括号被转义。

如何获得我想要的结果?我不想完全放弃 Uri.Builder,因为解决方案已经基于该类。

最佳答案

Not "all URLs are URIs". It depends on the interpretation of the RFC. For example in Java the URI parser does not like [ or ] and that's because the spec says "should not" and not "shall not"

This means that square brackets can't be straightly added in a URI (without encoding).

"[IPv6 host addresses] is the only place where square bracket characters are allowed in the URI syntax." If you use them in the right place, java.net.URI accepts them. new java.net.URI("foo://[1080:0:0:0:8:800:200C:417A]/a/b") succeeds for me in Java 1.7. "foo://example.com/a[b]" errors. This sounds in line with the RFC. The form new URI("http", "example.com", "/a/b[c]!$&'()*+", null, null) will %-encode the []. That java.net.URL accepts them elsewhere sounds like it's doing less validation

您真的需要使用 array_name[] 作为参数名称吗?您究竟希望通过 ?array_name[]=value1&array_name[]=value2 实现什么?

我认为您最好的选择(也是节省时间的选择)是更改参数名称。

您的 URI 构造正确。您将 [] 编码为 %5B%5D,然后收到您的请求的任何人都应该对其进行解码。如果您可以将 [] 放入您的 URI,您的具体问题的答案仍然是否。

关于java - 如何使用 Uri.Builder 将数组参数添加到 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25488051/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com