Пользовательский интерфейс Springdoc OpenAPI не учитывает контекстный путь в "местоположении"
Настроить:
Я использую библиотеку Java springdoc-openapi-ui
в версии 1.4.0 (через Maven) без какой-либо настройки в простом проекте с весенней загрузкой.
Страница Swagger создается под https://my-url.com/my-context-path/swagger-ui/index.html
и api-docs под https://my-url.com/my-context-path/v3/api-docs/
обе эти функции работают, и я могу с ними связаться. Все идет нормально!
Теперь проблема:
При простом переходе на https://my-url.com/my-context-path/swagger-ui.html я получаю HTTP-статус 302 иlocation
установленный в заголовке ответа атрибут, который должен перенаправить меня на страницу swagger сверху (я полагаю).
Однако URL-адрес в location
атрибут не попадает в контекстный путь! Выглядит это так:https://my-url.com/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config
Он перенаправляет на несуществующую страницу, и я получаю код ошибки 404. Обратите внимание, что в configUrl также отсутствует контекстный путь.
Есть идеи, почему это происходит и как это можно исправить?
Эта проблема с Github казалась той же проблемой, но в конце указано, что проблема устранена: https://github.com/springdoc/springdoc-openapi/issues/37, и это для более ранней версии, чем моя.
3 ответа
Хорошо, проблема в том, что
springdoc-openapi-ui
не знает путь контекста вашего приложения, если он не определен в весенней загрузке, что может быть недоступно для всех.
Надеюсь, он поддерживает нестандартный заголовок
X-Forwarded-Prefix
которые могут быть отправлены вашим шлюзом.
В моем случае (Kubernetes) Ingress можно настроить на вашем графике, просто добавив
nginx.ingress.kubernetes.io/x-forwarded-prefix: "true"
И в конфиге вашего приложения тоже нужно указать
server:
forward-headers-strategy: framework
использовать поддержку Spring для обработки перенаправленных заголовков.
Источники:
Чтобы правильно настроить swagger-ui, когда настроен внешний контекстный путь, используйте следующую конфигурацию.
springdoc.swagger-ui.config-url=/context-path/api-docs/swagger-config
springdoc.swagger-ui.url=/context-path/api-docs
springdoc.api-docs.path=/api-docs
Нет никаких известных проблем с использованием пути контекста. Как вы понимаете, № 37 решен, и это подтверждает!
Просто убедитесь, что вы следуете инструкциям по установке context-path в стандартном приложении с весенней загрузкой.
Вы можете протестировать конфигурацию вашего контекстного пути в различных демонстрационных примерах:
Если у вас есть какие-либо проблемы, вы можете зарегистрировать проблему, предоставив минимальный / воспроизводимый образец или с помощью модульных тестов, которые воспроизводят проблему.