Как добавить статические файлы, связанные с Swagger, в приложение Spring Boot + Jersey?

Я пытаюсь добавить поддержку Swagger в свой REST API, но не понимаю, как добавить файлы статического содержимого (HTML, JS), связанные с Swagger, в мое приложение Spring Boot.

Я использую следующие зависимости:

  • spring-boot-starter-parent:2.0.1.RELEASE
  • spring-boot-starter-jersey:2.0.1.RELEASE
  • swagger-jersey2-jaxrs:1.5.18

Это моя конфигурация чванства:

@Configuration
public class SwaggerConfig {
    @Bean
    public BeanConfig swaggerConfiguration() {
        final BeanConfig beanConfig = new BeanConfig();
        beanConfig.setResourcePackage("a.b.c");
        beanConfig.setScan(true);
        beanConfig.setPrettyPrint(true);
        return beanConfig;
    }
}

И конфигурация трикотажа:

@Component
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        register(ImageResource.class);
        register(io.swagger.jaxrs.listing.ApiListingResource.class);
        register(io.swagger.jaxrs.listing.SwaggerSerializers.class);
    }
}

Эта часть работает как шарм: когда я открываю http: // локальный: 8090 / swagger.json, я вижу ожидаемый контент Swagger JSON.

Но я не знаю, как добавить статический HTML-контент, связанный с Swagger, в мое приложение. Я вижу, что это содержимое находится в springfox-swagger-ui.jar, и я могу добавить его в свой проект как зависимость от maven, но как я могу распаковать содержимое из этой банки?

И каков правильный способ перезаписать URL-адрес swagger.json по умолчанию моим URL-адресом в статическом файле Swagger, чтобы Swagger сразу отображал мой REST API, когда я открываю swagger-ui.html.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
2 201
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
<dependency>
  <groupId>org.webjars</groupId>
  <artifactId>swagger-ui</artifactId>
  <version>${swagger-ui.version}</version>
</dependency>

Пожалуйста, не включайте springfox-swagger-ui.jar, он предназначен для работы с Spring от RestController.

Это полный URL-адрес swagger-ui: локальный: 8080 / myapp / webjars / swagger-ui / 3.13.3 / index.html. Короткий URL (локальный: 8080 / myapp / webjars / swagger-ui / index.html) не работает. Отчет об ошибке: github.com/spring-projects/spring-boot/issues/11355

zappee 18.04.2018 17:02

Вы можете улучшить доступность, определив свой собственный фильтр сервлетов, который перенаправляет /swagger-ui.html и / swagger-ui на что-то вроде webjars/swagger-ui/VERSION/index.html?url=/yourBasePath/swag‌​ger.json - url-Query-Param дополнительно настроит swagger-ui для инициализации с вашим URL-адресом спецификации api вместо стандартного petstore.

icyerasor 19.05.2020 19:03

Вы, должно быть, решили это сейчас, но это может помочь другим, поэтому вот полная процедура, так как я также искал учебное пособие.

Я использую Swagger V2 с Spring Boot 2, и это простой трехэтапный процесс.

Шаг 1: Добавьте необходимые зависимости в файл pom.xml. Вторая зависимость необязательна, используйте ее, только если вам нужен Swagger UI.

        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

Шаг 2: Добавить класс конфигурации

@Configuration
@EnableSwagger2
public class SwaggerConfig {

     public static final Contact DEFAULT_CONTACT = new Contact("Usama Amjad", "https://stackoverflow.com/users/4704510/usamaamjad", "[email protected]");
      public static final ApiInfo DEFAULT_API_INFO = new ApiInfo("Article API", "Article API documentation sample", "1.0", "urn:tos",
              DEFAULT_CONTACT, "Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList<VendorExtension>());

    @Bean
    public Docket api() {
        Set<String> producesAndConsumes = new HashSet<>();
        producesAndConsumes.add("application/json");
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(DEFAULT_API_INFO)
                .produces(producesAndConsumes)
                .consumes(producesAndConsumes);

    }
}

Шаг 3: Настройка завершена, и теперь вам нужно задокументировать API в controllers.

    @ApiOperation(value = "Returns a list Articles for a given Author", response = Article.class, responseContainer = "List")
    @ApiResponses(value = { @ApiResponse(code = 200, message = "Success"),
            @ApiResponse(code = 404, message = "The resource you were trying to reach is not found") })
    @GetMapping(path = "/articles/users/{userId}")
    public List<Article> getArticlesByUser() {
       // Do your code
    }

Применение:

Пользовательский интерфейс Swagger: Вы можете получить к нему доступ через http://localhost:8080/swagger-ui.html

Почтальон: Вы также можете получить доступ к своей документации JSON из http://localhost:8080/v2/api-docs и просто скопировать и вставить ее в Postman, чтобы использовать с ней.

Это не решение для Джерси.

Tugrul 18.01.2021 14:05

Другие вопросы по теме