Java URI.resolve

Я пытаюсь разрешить два URIs, но это не столь просто, как я хотел бы, чтобы это было.

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

Проблема - это a.resolve(b).toString() теперь "http://www.foo.combar.html". Как мне может сойти с рук это?

17
задан skaffman 28 March 2010 в 23:36
поделиться

1 ответ

Похоже, что вы, скорее всего, хотите использовать URL, а не 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's 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"
29
ответ дан 30 November 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: