Swagger UI добавляет дополнительный / путь на странице тестирования, когда позади Zuul
У меня есть несколько микросервисов за приложением весенней загрузки, встраивающим zuul, назовем его "шлюз".
Вот мой конфигурационный файл:
zuul:
prefix: /api
routes:
api-login:
path: /login/**
url: http://localhost:8070/the-login/
api-other:
...
Я хочу показать документацию для каждой моей службы в моем приложении шлюза, поэтому я создал следующее:
@Component
@Primary
@EnableAutoConfiguration
public class SwaggerDocumentationController implements SwaggerResourcesProvider{
@Override
public List<SwaggerResource> get() {
List<SwaggerResource> resources = new ArrayList<SwaggerResource>();
resources.add(swaggerResource("login-service", "/api/login/api-docs", "2.0"));
...
return resources;
}
private SwaggerResource swaggerResource(String name, String location, String version) {
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(name);
swaggerResource.setLocation(location);
swaggerResource.setSwaggerVersion(version);
return swaggerResource;
}
}
Это работает довольно хорошо: каждый раз, когда пользователь заходит в / gateway / api / login, он перенаправляется в мой микросервис, поэтому в /the-login /. Кроме того, когда пользователь переходит на /gateway/login/swagger-ui.html, он может видеть документацию.
Проблема в том, что когда пользователь пытается API на странице документации пользовательского интерфейса Swagger, они получают:
{
"timestamp": "2018-05-12T15:35:38.840+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/the-login/the-login/LoginTest"
}
Как вы можете видеть, zuul добавил еще один логин к пути! Это ошибка чванства или я что-то не так делаю?
1 ответ
Ты используешь the-login
как контекстный путь в api-login
оказание услуг. Поэтому, когда вы загружаете шлюз службы Swagger, его добавить the-login
в ссылочный базовый URL, как это.
Вот в чем причина the-login
добавляется дважды (один из base-url и один из config). Это может быть ошибка в Swagger UI.
Обходной путь, который я попробовал, и это сработало
Удалить / логин из application.yml
zuul:
prefix: /api
routes:
api-login:
path: /login/**
url: http://localhost:8070/
api-other:
Теперь ресурс swagger не будет загружаться, поэтому нужно изменить путь ресурса swagger.
Добавьте логин в ресурсах чванства
resources.add(swaggerResource("login-service", "/api/login/the-login/api-docs", "2.0"));