Как отобразить статический файл swamger yaml в приложении url / swagger - PullRequest
2 голосов
/ 03 июня 2019

Я создал файл yaml (формат openapi 3.0.0) в качестве документации для нашего API.Я хотел бы отобразить этот (статический) файл swamger-ui yaml по адресу URL, на котором запущено приложение.Что-то вроде http://localhost:8080/swagger-ui.Где отображается графическое представление файла yaml (здесь ).Файл Yaml помещен в корневую папку проекта.

Я запускаю приложение на Java 11, Springboot 2.1.5, сборка с Maven.

Я пытался сгенерировать swamger yaml из кода, используя

    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.9.2</version>
    </dependency>

Но это не идеально (отсутствуют значения по умолчанию, описания ..)

Я пытался springстатические ресурсы безуспешно.Проблема в том, что файл yaml не является html.

Есть ли другой (возможно, лучший) способ отображения документации API?

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Мы смогли выполнить эту задачу, используя класс @Configugarion

@Configuration
    public class SwaggerConfiguration implements WebMvcConfigurer {

      private final String swaggerUILocation = "whatEverLocationYouWant";
      private final String swaggerApiDocsLocation = "whatEverLocationYouWant";

      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(swaggerUILocation + "**")
            .addResourceLocations("classpath:/swagger-ui/");
        registry.addResourceHandler(swaggerApiDocsLocation + "**")
            .addResourceLocations("classpath:/swagger/");
      }
    }

Затем мы использовали jar-файл swagger-ui, разархивировали его в папку ресурсов и заменили одну строку в файле index.html здесь:

<script>
      window.onload = function () {
        // Begin Swagger UI call region
        const ui = SwaggerUIBundle({
          url: "placeHereExactLinkToYourYamlFile",
          dom_id: '#swagger-ui',
          deepLinking: true,
          presets: [
            SwaggerUIBundle.presets.apis,
            SwaggerUIStandalonePreset
          ],
          plugins: [
            SwaggerUIBundle.plugins.DownloadUrl
          ],
          layout: "StandaloneLayout"
        })
        // End Swagger UI call region

        window.ui = ui
      }
    </script>

HTML-код swagger виден и работает рядом с приложением.

0 голосов
/ 03 июня 2019

вам также нужно добавить зависимость пользовательского интерфейса Swagger.

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

, затем вы можете получить доступ к интерфейсу Swagger, используя,

http://localhost:9090/swagger-ui.html#/

попробуйте добавить это в ваш метод,

public void yourMethod(@ApiParam(name = "id", required = true, value = "The id of the site", defaultValue = "3F7B07E2") String id)
...