Swagger UI добавляет дополнительный / путь на странице тестирования, когда позади zuul - PullRequest
0 голосов
/ 12 мая 2018

У меня есть несколько микросервисов за приложением весенней загрузки, встраивающим zuul, назовем его « gateway ».

Вот мой конфигурационный файл:

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 Ответ

0 голосов
/ 12 мая 2018

Вы используете the-login в качестве контекстного пути в сервисе api-login.Поэтому, когда вы загружаете сервис-шлюз swagger, он добавляет the-login в базовый URL-адрес swagger, вот так.swagger ui

По этой причине the-login добавляется дважды (один из base-url и один из config).Это может быть ошибка в пользовательском интерфейсе Swagger.

Обходной путь, который я пробовал, и он работал

Удаление / вход в систему из application.yml

zuul:
  prefix: /api
  routes:
    api-login:
      path: /login/**
      url: http://localhost:8070/
    api-other:

Теперь ресурс swagger не загружается, поэтому необходимо изменить путь ресурса swagger.

Добавить логин в ресурсах swagger

resources.add(swaggerResource("login-service", "/api/login/the-login/api-docs", "2.0"));
...