Swagger.json не получает кормления для пользовательского интерфейса - PullRequest
0 голосов
/ 26 апреля 2018

Будучи зеленым рогом, я попытался интегрировать ядро ​​Swagger с моим API остальных по этой ссылке -> https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project-Setup-1.5

Возникли некоторые проблемы с функцией setScan в BeanConfig, поэтому пакет отражений с более низкими характеристиками, как видно из моего файла maven ниже:

    <dependency>
         <groupId>io.swagger</groupId>
         <artifactId>swagger-jaxrs</artifactId>
         <version>1.5.18</version>
         <exclusions>
             <exclusion>
                 <groupId>org.reflections</groupId>
                 <artifactId>reflections</artifactId>
             </exclusion>
         </exclusions>
    </dependency>
    <dependency>
        <groupId>org.reflections</groupId>
        <artifactId>reflections</artifactId>
        <version>0.9.10</version>
    </dependency>
    <dependency>
         <groupId>org.webjars</groupId>
         <artifactId>swagger-ui</artifactId>
         <version>3.13.6</version>
         <scope>runtime</scope>
    </dependency>

Это был метод запуска приложения:

 public void start() throws Exception {
       BeanConfig beanConfig = new BeanConfig();
       beanConfig.setVersion("2.0");
       beanConfig.setSchemes(new String[]{"http"});
       beanConfig.setHost("0.0.0.0:8082");
       beanConfig.setBasePath("/test");
       beanConfig.setResourcePackage("io.confluent.kafkarest.resources");
       beanConfig.setScan(true);
       beanConfig.setPrettyPrint("true");
       if (server == null) {
         createServer();
       }
    server.start();
  }

Таким образом я смог создать swagger.json в корневом каталоге. Теперь я хотел передать этот json swagger ui, поэтому я добавил зависимость в maven pom.xml, как видно выше. И изменил код, как показано ниже:

      public void start() throws Exception {
           BeanConfig beanConfig = new BeanConfig();
           beanConfig.setVersion("2.0");
           beanConfig.setSchemes(new String[]{"http"});
           beanConfig.setHost("0.0.0.0:8082");
           beanConfig.setBasePath("/test");
           beanConfig.setResourcePackage("io.confluent.kafkarest.resources");
           beanConfig.setScan(true);
           beanConfig.setPrettyPrint("true");
           if (server == null) {
             createServer();
           }
        server.setHandler(buildSwaggerUI()); //--> added this method call.
        server.start();
      }

      public static ContextHandler buildSwaggerUI() throws Exception {
        ResourceHandler rh = new ResourceHandler();
        rh.setResourceBase(KafkaRestApplication.class.getClassLoader()
            .getResource("META-INF/resources/webjars/swagger-ui/3.13.6")
            .toURI().toString());
        ContextHandler context = new ContextHandler();
        context.setContextPath("/swagger");
        context.setHandler(rh);
        return context;
      }

После этого я могу получить довольно красивый пользовательский интерфейс по умолчанию, но теперь swagger.json пропал. Я больше не получаю swagger.json. Я пытался следить за этим блогом: https://danielflower.github.io/2016/04/01/Swagger-with-embedded-jetty-without-magic.html

Я действительно изо всех сил пытаюсь заставить swagger ui работать с swagger json spec. Я чувствую, что скучаю по чему-то глупому? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 26 апреля 2018

Я заработал, перейдя по этой ссылке.Мой рабочий код выглядел примерно так:

      public void start() throws Exception {
           BeanConfig beanConfig = new BeanConfig();
           beanConfig.setVersion("2.0");
           beanConfig.setSchemes(new String[]{"http"});
           beanConfig.setHost("0.0.0.0:8082");
           beanConfig.setBasePath("/test");
           beanConfig.setResourcePackage("io.confluent.kafkarest.resources");
           beanConfig.setScan(true);
           beanConfig.setPrettyPrint("true");
           if (server == null) {
             createServer();
           }
        final HandlerList handlers = new HandlerList();
        handlers.addHandler(buildSwaggerUI());
        handlers.addHandler(buildContext());
        server.setHandler(handlers);
        server.start();
      }

      private static ContextHandler buildContext() {
        ResourceConfig resourceConfig = new ResourceConfig().packages(WS_PACKAGE, "io.swagger.jaxrs.listing");
        ServletContainer servletContainer = new ServletContainer(resourceConfig);
        ServletHolder eBrowser = new ServletHolder(servletContainer);
        ServletContextHandler eContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
        eContext.setContextPath("/");
        eContext.addServlet(eBrowser, "/*");

        return eContext;
      }

      public static ContextHandler buildSwaggerUI() throws Exception {
        ResourceHandler rh = new ResourceHandler();
        rh.setResourceBase(KafkaRestApplication.class.getClassLoader()
            .getResource("META-INF/resources/webjars/swagger-ui/3.13.6")
            .toURI().toString());
        ContextHandler context = new ContextHandler();
        context.setContextPath("/swagger");
        context.setHandler(rh);
        return context;
      }
...