2016-01-06 2 views
2

У меня есть объект java.net.URI типа, и я хочу, чтобы преобразовать его в String представления, но я заинтересован только в следующих компонентах:Преобразование URI в строку с только хост, порт и путь

  • хозяина
  • порта
  • путь

Я не хочу, чтобы иметь какие-либо другие элементы, такие как запрос, фрагмент, пользователь-информацию или схема.

Выполнение работ вручную getHost(), getPort() и getPath() выглядит хрупким решением. Есть ли какой-либо URI форматировщик или под заказ toString?

Хрупким здесь я имею в виду, что могут быть некоторые угловые шкафы, которые я бы забыл обработать вручную. Как, например, случай, когда хост является адресом IPv6, а затем он needs to have brackets.

+1

Почему это хрупкость? –

+0

@SamSun Мне нужно было бы выполнить все конкатенации и обработать отсутствующие компоненты вручную, которые были бы склонны к ошибкам. –

+0

@MichalKordas: Мне кажется, это достаточно просто, если честно. Около 10 строк кода, легко протестированных ... –

ответ

3

Вы могли бы довольно легко построить новый URI:

URI partial = new URI(
    null, // scheme 
    null, // user info 
    uri.getHost(), 
    uri.getPort(), 
    uri.getPath(), 
    null, // query 
    null); // fragment 
String text = partial.toString(); 

Вы, вероятно, хотите, чтобы проверить, что хост не равен нулю, для того, чтобы быть разумным, хотя.

Альтернативно, подход конкатенации вряд ли будет намного сложнее - и я предполагаю, что у вас будут модульные тесты для проверки всех комбинаций независимо от реализации.

Смежные вопросы