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, как это. Swagger UI

Вот в чем причина 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"));
Другие вопросы по тегам