Java URI.resolve

2022-09-01 20:16:52

我正在尝试解决两个 URI,但它并不像我想要的那么简单。

URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");

麻烦的是,现在是。我怎么能逃脱呢?a.resolve(b).toString()"http://www.foo.combar.html"


答案 1

听起来您可能希望使用URL而不是URI(URI更通用,需要处理不太严格的语法)。

URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
URI c = a.resolve(b);
c.toString()     -> "http://www.foo.combar.html"
c.getAuthority() -> "www.foo.com"
c.getPath()      -> "bar.html"

URI 的 toString() 的行为并不像你预期的那样,但考虑到它的一般性质,它可能应该被原谅。

可悲的是,URI的toURL()方法并不像我希望给你想要的那么好。

URL u = c.toURL();
u.toString()     -> "http://www.foo.combar.html"
u.getAuthority() -> "www.foo.combar.html"  --- Oh dear :(

因此,最好直接从URL开始,以获得您想要的内容:

URL x = new URL("http://www.foo.com");
URL y = new URL(x, "bar.html");
y.toString() -> "http://www.foo.com/bar.html"

答案 2

URI 还应包含最终的分隔符 ('/') 以按所需方式解析:

URI a = new URI("http://www.foo.com/");