Изменение порта URI
В Java класс URI
является неизменным.
Вот как я сейчас изменяю порт:
public URI uriWithPort(URI uri, int port) {
try {
return new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), port,
uri.getPath(), uri.getQuery(), uri.getFragment());
} catch (URISyntaxException e) {
LOG.error("Updating URI port failed:",e);
return uri;
}
}
Есть ли более простой способ?
Ответы
Ответ 1
Нет, это в значительной степени. "Это немного многословно, дано, но это не так сложно.: -)
Если вы используете Java EE, а не только JDK, см. ответ Talha Ahmed Khan, в котором используется Java EE UriBuilder
, который по-прежнему является однострочным, но более элегантным. Это не часть JDK, но если вы делаете сервлет или похожий (или не возражаете, включая необходимую банку)...
Ответ 2
Вы также можете использовать URIBuider
http://download.oracle.com/javaee/6/api/javax/ws/rs/core/UriBuilder.html
UriBuilder.fromURI(uri).port(port).build("foo", "bar");
Ответ 3
Создание нового объекта URL из существующего объекта выглядит как простая вещь:
URL originalURL = new URL("http://octopus:345/squid.html");
URL newURL = newURL(originalURL.getProtocol(), originalUrl.getHost(), newPort, originalURL.getFile());
Ответ 4
Как насчет использования uri.resolve(URI)
? Или используйте URI.create(URI)