Vaadin 14 как переместить сервлет vaadin на другой URL?

#java #spring-boot #vaadin #vaadin-flow #vaadin14

#java #весенняя загрузка #vaadin #vaadin-flow #vaadin14

Вопрос:

У меня запущено довольно простое приложение vaadin. Приложение поддерживается при загрузке с помощью spring, и я определил некоторый rest API.

Я добавил документацию по OpenAPI, используя org.springdoc:springdoc-openapi-ui: 1.4.4, которая отлично работала до добавления vaadin.

После добавления зависимостей vaadin, как показано в руководстве vaadin spring-boot, и создания представления (которое работает) пользовательский интерфейс swagger больше недоступен.

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

Я не нахожу никаких документов о том, как это настроить — я бы ожидал, что можно настроить vaadin таким образом, чтобы он обслуживал пользовательский интерфейс по другому пути, скажем /ui или аналогичному.

Я пытался установить

 vaadin:
   url-mapping: "/ui/*"
  

в моем application.yaml — но это приводит к пустым страницам (без ошибок) для моих представлений vaadin,
и сервлет vaadin все еще берет верх / .

Я использую spring.загрузитесь 2.3.2.RELEASE , vaadin 14.3.1 .

Комментарии:

1. Как отмечено ниже — с тех пор я отладил это дальше. Мне кажется, что сервлет vaadin WebJar перехватывает все запросы и выполняет некоторую логику, чтобы решить, нацелен ли конкретный запрос на зависимость WebJar от vaadin. Используемая логика, которую я еще не до конца понимаю, определяется исключительно путем запроса. К сожалению, это мешает springdoc конфигурации spring, которая регистрирует свои собственные вебинары для пользовательского интерфейса swagger. Настройка выполнена, но запросы не доходят до springdoc кода.

2. Смотрите также дополнительные обсуждения на эту тему на форуме vaadin

Ответ №1:

Переопределяемое значение равно (обратите внимание на camelCase вместо kebab-case):

 vaadin:
  urlMapping: /ui/*
  

Использование kebab-case не сработало. Как и ожидалось, это ошибка. Смотрите https://github.com/vaadin/spring/issues/637

Из документов на данный момент:

Вы можете задать свойства для Spring Boot в вашем application.properties файле.

Пример: Настройка сопоставления URL Spring в application.properties .

 vaadin.urlMapping=/my_mapping/*
  

По умолчанию сопоставление URL является /* .

Для обработки ресурсов интерфейса для некорневых сервлетов требуется дополнительный сервлет, такой как /my_mapping/* . Сервлет может быть определен в вашем классе приложения. Смотрите этот класс приложения в качестве примера.


Источник: https://vaadin.com/docs/v14/flow/spring/tutorial-spring-configuration.html#using-spring-boot-properties

Комментарии:

1. варианты camel и kebab правильно интерполируются внешней конфигурацией spring-boot. Проблема не в этом. Кроме того, я действительно вижу изменения при добавлении этой конфигурации.

2. Проблема связана с тем, что сервлет WebJar vaadin перехватывает запросы. Все еще требуется дополнительная отладка, но это не проблема конфигурации.

3. Да, действительно. Это сбивает меня с толку, но да.

4. То же самое здесь — я не пытался найти виновника, но я предполагаю, что это какой-то хакерский способ получить значение с помощью spring-way, в то время как эта функция уже есть в ядре. Я считаю это ошибкой.

5. Похоже, это связано с этой ошибкой github.com/vaadin/spring/issues/637 Похоже, что исправление было объединено с 14.0.2 11 дней назад: github.com/vaadin/spring/commit /…