Как настроить Swagger в Glassfish 4 без web.xml?

Документация Swagger описывает несколько различных способов настройки Swagger в приложении. К сожалению, все они используют web.xml и полагаются на жесткое кодирование версии API и базового URL-адреса в web.xml.

Есть ли способ настроить Swagger без использования web.xml и без жесткого кодирования версии API и базового пути?


person lucasweb    schedule 29.10.2013    source источник


Ответы (1)


Я использовал следующий подход для настройки Swagger в Glassfish 4 без XML-ресурса.

  1. Включает следующую зависимость в файле сборки gradle (этот подход также применим к Maven):

    компиляция ('com.wordnik: swagger-jaxrs_2.9.1: 1.3.0') { группа исключения: 'org.scala-lang', модуль: 'scala-compiler'}

  2. Создайте класс, который расширяет javax.ws.rs.core.Application, и настройте ApplicationPath, например.

    @ApplicationPath ("ресурсы") открытый класс RESTConfig расширяет приложение {}

2а. Создайте класс, расширяющий com.wordnik.swagger.jaxrs.config.DefaultJaxrsConfig, и аннотируйте его следующим образом:

@WebServlet(name = "SwaagerJaxrsConfig" initParams = {@WebInitParam(name="api.version",  value="0.1.0"), @WebInitParam(name="swagger.api.basepath", value="http://localhost:8080/resources"})}, loadOnStartup = 2) 

public class SwaagerJaxrsConfig  extends DefaultJaxrsConfig{}

Недостатком этого подхода является то, что версия API и базовый URL-адрес вашего приложения жестко закодированы в аннотации. Чтобы обойти это, я использовал следующий подход вместо описанного выше.

2б. Создайте класс, который расширяет HttpServlet и выполняет загрузку, выполняемую DefaultJaxrsConfig, например.

@WebServlet(name = "SwaggerJaxrsConfig", loadOnStartup = 2)
public class SwaggerJaxrsConfig extends HttpServlet {

private Logger log = Logger.getLogger(SwaggerJaxrsConfig.class);

@Inject Version version;

@Override public void init(ServletConfig servletConfig) {
    try {
        super.init(servletConfig);
        SwaggerConfig swaggerConfig = new SwaggerConfig();
        ConfigFactory.setConfig(swaggerConfig);
        swaggerConfig.setBasePath("http://localhost:8080/resources"); //TODO look up app path
        swaggerConfig.setApiVersion(version.getVersion());
        ScannerFactory.setScanner(new DefaultJaxrsScanner());
        ClassReaders.setReader(new DefaultJaxrsApiReader());
    } catch (Exception e) {
        log.error("Failed to configure swagger", e);
    }
  }
} 
person lucasweb    schedule 29.10.2013
comment
Спасибо за ответ! Было бы очень полезно для сообщества, если бы у вас был URL-адрес git, и вы могли бы поделиться, поскольку в ответе есть несколько шагов с разными классами. - person user2359997; 06.01.2020