java.net.URI仅针对查询字符串进行解析

luc*_*svc 5 java uri

我正在尝试使用JDK java.net.URI构建URI 。
我想附加一个绝对URI对象,一个查询(在String中)。例如:

URI base = new URI("http://example.com/something/more/long");
String queryString = "query=http://local:282/rand&action=aaaa";
URI query = new URI(null, null, null, queryString, null);
URI result = base.resolve(query);
Run Code Online (Sandbox Code Playgroud)

理论(或我的想法)是决心应该返回:

http://example.com/something/more/long?query=http://local:282/rand&action=aaaa
Run Code Online (Sandbox Code Playgroud)

但是我得到的是:

 http://example.com/something/more/?query=http://local:282/rand&action=aaaa
Run Code Online (Sandbox Code Playgroud)

为什么#resolve() “吃掉”最后一条路?如果新的URI(query)构建为:

URI query = new URI(null, null, base.getPath(), queryString, null);
Run Code Online (Sandbox Code Playgroud)

它运作良好。

luc*_*svc 4

我想亲自回应一下。Javadoc确实解释得正确。正如URI#resolve()在第 3.b 节中所述:

否则,给定 URI 的路径是相对的,因此新 URI 的路径是通过根据给定 URI 的路径解析给定 URI 的路径来计算的。这是通过将此 URI 路径的最后一段(如果有)与给定 URI 的路径连接起来,然后对结果进行标准化(就像调用标准化方法一样)来完成的。

所以....我没有读正确。我应该删除这个回复吗?还是让它自己回复?