Swagger с Spring Boot 2.0 ведет к ошибке 404 - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь интегрировать мою версию Spring Boot 2.0.1.RELEASE с Swagger .

Из этого сообщения в блоге казалось, что это будет легко, простодобавление двух зависимостей Maven и все должно работать.

Итак, я добавил следующие зависимости в pom:

        <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>

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

И создал бин SwaggerConfig:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
    Docket docket = new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build();

    return docket;
   }
}

И в файле свойств я получил эти 3 записи во время попыток заставить его работать:

spring.application.name=cat-service
management.server.servlet.context-path=/cat-service
server.servlet.contextPath=/cat-service

Но в конце, при доступе к

http://localhost:8080/cat-service/api/v2/api-docs

или на странице пользовательского интерфейса

http://localhost:8080/cat-service/swagger-ui.html

Я получаю page not found ошибку.

Я обнаружил эту проблему на странице Swagger GitHub и этот вопрос в stackoverflow , но я не смог изменить мою 404 ошибку.

Ответы [ 5 ]

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

Сначала добавьте файл SwaggerConfig.java в тот же пакет, что и ваш файл Springboot, как этот.

@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig extends WebMvcConfigurerAdapter {                                    
    @Bean
    public Docket api() { 
        return new Docket(DocumentationType.SWAGGER_2)  
          .select()                                  
          .apis(RequestHandlerSelectors.any())              
          .paths(PathSelectors.any())                          
          .build();                                           
    }

   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
       registry.addResourceHandler("swagger-ui.html")
       .addResourceLocations("classpath:/META-INF/resources/");

       registry.addResourceHandler("/webjars/**")
       .addResourceLocations("classpath:/META-INF/resources/webjars/");
   }

}

попробуйте это {http://localhost:8080/spring-security-rest/api/swagger-ui.html} или {http://localhost:8080/spring-security-rest/swagger-ui.html}

IFЭто НЕ РАБОТАЕТ, поэтому давайте попробуем изменить путь в application.properties

Добавьте это в свои файлы

server.servlet-path=/my-service

и попробуйте это http://localhost:8080/my-service/swagger-ui.html (UI Docs)

http://localhost:8080/loop-service/v2/api-docs (JSON Docs)

Результат: enter image description here

0 голосов
/ 23 мая 2019

Другая возможность - это местоположение вашего конфигурационного файла Swagger;Вы должны поместить его в тот же пакет или подпакет из файла весенней загрузки.Как на картинке выше:

Swagger config and Spring Boot file hierarchy

0 голосов
/ 13 сентября 2018

Мне удалось заставить его работать с загрузочной версией Spring 2.0.4.RELEASE и в этой записи блога :

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

<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>

И этофайл конфигурации:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SpringFoxConfig {
    @Bean
    public Docket apiDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

И это сработало.

Интерфейс Swagger доступен по адресу /swagger-ui.html#

0 голосов
/ 14 февраля 2019

у меня стало работать после удаления @EnableWebMvc

0 голосов
/ 16 августа 2018

Это сработало для меня, я использовал WebMvcConfigurer вместо WebMvcConfigurerAdapter, потому что этот класс уже устарел.

@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
  @Bean
  public Docket productApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()                
            .apis(RequestHandlerSelectors.basePackage("com.illary.controller"))
            .paths(PathSelectors.any())
            .build()            
            .apiInfo(metaData());
  }
  private ApiInfo metaData() {
    return new ApiInfoBuilder()
            .title("Spring Boot Swagger App")
            .description("\"Spring Boot Swagger Server App\"")
            .version("1.0.0")
            .license("Apache License Version 2.0")
            .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0\"")
            .build();
  }

  public ApiInfo apiInfo() {
    final ApiInfoBuilder builder = new ApiInfoBuilder();
    builder.title("Swagger Test App").version("1.0").license("(C) Copyright Test")
    .description("The API provides a platform to query build test swagger api");

    return builder.build();
  }

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("swagger-ui.html")
    .addResourceLocations("classpath:/META-INF/resources/");

    registry.addResourceHandler("/webjars/**")
    .addResourceLocations("classpath:/META-INF/resources/webjars/");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...