#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/*
. Сервлет может быть определен в вашем классе приложения. Смотрите этот класс приложения в качестве примера.
Комментарии:
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 /…