Изменение порта 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, но если вы делаете сервлет или похожий (или не возражаете, включая необходимую банку)...

Ответ 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)