Рубрики
Без рубрики

Путеводитель по UriComponentsBuilder весной

Быстрое и практичное руководство по использованию UriComponentsBuilder весной

Автор оригинала: baeldung.

Путеводитель по UriComponentsBuilder весной

1. Введение

В этом учебнике мы сосредоточимся на весенней UriComponentsBuilder. В частности, мы опишем различные практические примеры реализации.

Строитель работает совместно с УриКомпоненты класс – непреложный контейнер для компонентов URI.

Новая UriComponentsBuilder класс помогает создавать УриКомпоненты путем обеспечения мелкозернистого контроля над всеми аспектами подготовки URI, включая строительство, расширение от переменных шаблонов и кодирование.

2. Мейвен зависимостей

Для того, чтобы использовать строитель, мы должны включить следующий раздел в зависимостей нашего пом.xml :


    org.springframework
    spring-web
    5.2.2.RELEASE

Последнюю версию можно найти здесь .

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

Мы, конечно, также необходимо создать лесозаготовки для проекта – подробнее об этом здесь .

3. Использование случаев

Есть много практических случаев использования для UriComponentsBuilder , начиная с контекстуального кодирования символов, не разрешенных в соответствующем компоненте URI, заканчивая динамической заменой частей URL.

Одно из самых больших преимуществ UriComponentsBuilder является то, мы можем ввести его прямо в метод контроллера :

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity createCustomer(UriComponentsBuilder builder) {
    // implementation
}

Начнем описывать полезные примеры один за другим. Мы будем использовать фреймворка JUnit для немедленной проверки наших реализаций.

3.1. Строительство УРИ

Начнем с самого простого. Мы хотим использовать UriComponentsBuilder просто для создания простой ссылки:

@Test
public void constructUri() {
    UriComponents uriComponents = UriComponentsBuilder.newInstance()
      .scheme("http").host("www.baeldung.com").path("/junit-5").build();

    assertEquals("/junit-5", uriComponents.toUriString());
}

Как мы можем наблюдать, мы создали новый экземпляр UriComponentsBuilder , затем мы предоставили тип схемы, хост и путь к месту назначения запроса.

Этот простой пример может быть полезен, когда мы хотим выполнить перенаправление на другую часть/ссылку нашего сайта.

3.2. Строительство закодированного URI

В дополнение к созданию простой ссылки, мы можем захотеть кодировать конечный результат. Давайте посмотрим на практике:

@Test
public void constructUriEncoded() {
    UriComponents uriComponents = UriComponentsBuilder.newInstance()
      .scheme("http").host("www.baeldung.com").path("/junit 5").build().encode();

    assertEquals("/junit%205", uriComponents.toUriString());
}

Разница в этом примере заключается в том, что мы хотим добавить пространство между словом Джунит и число 5 . Соответственно к RFC 3986 , это было бы невозможно. Мы должны кодировать ссылку для достижения действительного результата, используя кодировать () метод.

3.3. Строительство URI из шаблона

Шаблоны URI разрешены в большинстве компонентов URI, но их значение ограничено определенным элементом, который мы указываем в качестве шаблона. Давайте посмотрим пример, чтобы прояснить:

@Test
public void constructUriFromTemplate() {
    UriComponents uriComponents = UriComponentsBuilder.newInstance()
      .scheme("http").host("www.baeldung.com").path("/{article-name}")
      .buildAndExpand("junit-5");

    assertEquals("/junit-5", uriComponents.toUriString());
}

Разница в этом примере заключается в том, как мы объявляем путь и как мы строим окончательный URI. Шаблон, который будет заменен ключевыми словами, указан скобками – {…}, внутри путь () метод. Ключевое слово, используемое для создания конечной ссылки, используется в методе, названном buildAndExpand (…) .

Пожалуйста, обратите внимание, что может быть несколько ключевых слов, которые будут заменены. Кроме того, путь к URI может быть относительным.

Этот пример будет очень полезен, если мы хотим передать объекты модели контроллеру Spring, на основе которого мы построим URI.

3.4. Построение URI с параметрами запроса

Другим очень полезным случаем является создание URI с параметрами запроса.

Мы должны использовать запрос () из UriComponentsBuilder указать параметры запроса URI. Рассмотрим следующий пример:

@Test
public void constructUriWithQueryParameter() {
    UriComponents uriComponents = UriComponentsBuilder.newInstance()
      .scheme("http").host("www.google.com")
      .path("/").query("q={keyword}").buildAndExpand("baeldung");

     assertEquals("http://www.google.com/?q=baeldung", uriComponents.toUriString());
}

Запрос будет добавлен в основную часть ссылки. Мы можем предоставить несколько параметров запроса, используя {…}. Они будут заменены ключевыми словами в методе, названном buildAndExpand (…) .

Эта реализация UriComponentsBuilder может использоваться для построения, например, языка запросов для API REST.

3.5. Расширение URI с регулярными выражениями

Последним примером является отображение конструкции URI с проверкой regex. Мы сможем расширить uriComponents только в том случае, если проверка regex будет успешной:

@Test
public void expandWithRegexVar() {
    String template = "/myurl/{name:[a-z]{1,5}}/show";
    UriComponents uriComponents = UriComponentsBuilder.fromUriString(template)
      .build();
    uriComponents = uriComponents.expand(Collections.singletonMap("name", "test"));
 
    assertEquals("/myurl/test/show", uriComponents.getPath());
}

В вышеупомянутом примере мы видим, что в средней части ссылки должны быть только буквы из a-z и длина в диапазоне между 1-5 .

Кроме того, мы используем синглтонМэп , чтобы заменить ключевые имя с значением тестовый .

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

4. Заключение

В этом учебнике представлены полезные примеры UriComponentsBuilder .

Основные преимущества UriComponentsBuilder гибкость использования переменных шаблонов URI и возможность введения их непосредственно в методы весеннего контроллера.

Все примеры и конфигурации доступны здесь, на GitHub .