2016-11-25 5 views
0

Излишне говорить, что я знаю, что есть тонна вопросов по этому же вопросу, но я застрял, пытаясь исправить это в течение 2 дней, и большинство из того, что я прочитал, устарело.Интеграция Spring Swagger-ui

Так что да .. это то, что я прямо сейчас:

Gradle:

dependencies { 
compile 'org.springframework.cloud:spring-cloud-starter-hystrix' 
compile 'org.springframework.boot:spring-boot-starter-web' 
compile 'org.springframework.boot:spring-boot-starter-actuator' 
compile 'org.springframework.boot:spring-boot-starter-security' 
compile 'org.springframework.ws:spring-ws-core' 
compile 'io.springfox:springfox-swagger2:2.4.0' 
compile 'io.springfox:springfox-swagger-ui:2.4.0' 
} 

Основной класс:

@EnableSwagger2 
public class Application { 
public static void main(String[] args) { 
     SpringApplication.run(FeedServiceApplication.class, args); 
} 

@Bean 
public Docket swaggerSettings() { 
    return new Docket(DocumentationType.SWAGGER_2) 
      .select() 
      .apis(RequestHandlerSelectors.any()) 
      .paths(PathSelectors.any()) 
      .build() 
      .pathMapping("/"); 
} 

Когда я посещаю: http://localhost:8080/v2/api-docs, я получаю документацию JSon просто хорошо. Кроме того, когда я загружаю swagger-ui из github, установите источник в ссылку выше и запустите его на рабочем столе, он также отлично работает. То, что не работает, заключается в объединении этих двух вещей (получение его для работы в http://localhost:8080/swagger-ui.html).

Есть много учебников, такие, как эти, где они утверждают, что материал выше сделает чванство-щий работой:

http://kubecloud.io/guide-using-swagger-for-documenting-your-spring-boot-rest-api/

http://www.baeldung.com/swagger-2-documentation-for-spring-rest-api

И масса других учебных пособий, где они инструктируют вас добавьте папку dist из swagger-ui git в свой проект.

отображения Кроме того, как это:

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

@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/"); 
    } 
} 

не удается, а также, бросать Scope «запрос» не является активным для текущего потока; исключение.

После того, как вы попробовали некоторые учебные пособия с YouTube, те, которые были связаны выше и многие другие, все, что я видел, это «страница не найдена». Если бы кто-нибудь мог объяснить, что я пропущу, я был бы очень благодарен.

TL: DR Как заставить swagger-ui.html работать?

EDIT: найдено решение.

В случае, если кто-то еще наткнулся на это, проблема в том, что если у вас есть сопоставление запросов, которое принимает параметр @RequestMapping("/{param}"), диспетчерServlet больше не отображает/** в ResourceHttpRequestHandler. Следующий код исправляет эту проблему.

@Configuration 
@EnableAutoConfiguration 
@EnableSwagger2 
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/"); 
    } 
} 
+0

The swagger-ui, который вы должны использовать, - это тот, который предоставляется springfox, и который использует webjar, поэтому файлы html или css не устанавливаются вручную в вашем webapp. –

+0

Спасибо за помощь. Застрял в той же проблеме. –

ответ

0

Это то, что используем как setup. Класс для своих собственных аннотацию @Configuration

@Configuration 
@EnableSwagger2 
public class SwaggerConfig { 
    @Bean 
    public Docket api() { 
    return new Docket(DocumentationType.SWAGGER_2) 
     .select() 
     .apis(RequestHandlerSelectors.any()) 
     .paths(Predicates.not(PathSelectors.regex("/error"))) 
     .build() 
     .apiInfo(apiInfo()); 
    } 
    private ApiInfo apiInfo() { 
    return new ApiInfo(
     "APP NAME", 
     "APP DESCRIPTION", 
     "1.0", 
     null, 
     new Contact("Firstname Lastname", null, "[email protected]"), 
    null, 
    null); 

}}

+0

Спасибо за ответ. Пробовал это также, но нет конечной точки для ui. – Rauno

+0

На каком адресе вы смотрите? вы, кажется, добавляете v2 там, наш swagger gui находится у хозяина: 8050/swagger-ui.html, где 8050 - это порт, который выставлен. – hecko84

+0

Я смотрю на /swagger-ui.html и v2/swagger-ui.html, но я вижу все конечные точки в консоли (например, я вижу v2/api-docs просто отлично), и нет никакой конечной точки для ui. – Rauno

0
<dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger2</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger-ui</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-spi</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-core</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-spring-web --> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-spring-web</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

Преобразовать выше зависимость для Gradle. версии я использовал 2.3.1

package XXXX; 

import springfox.documentation.swagger2.annotations.EnableSwagger2; 

@EnableSwagger2 
public class SwaggerConfiguration { 

} 

Мы позволили Swagger Config, как указано выше.

Вы можете добавить Docket боб для пользовательских заголовков:

@Bean 
    public Docket docket() { 

Parameter parameterAuthorization = 
     new ParameterBuilder().name("Authorization").description("Authentication of the API User") 
      .modelRef(new ModelRef("string")).parameterType("header").required(true).build(); 

    Parameter parameterClientUserId = 
     new ParameterBuilder().name("user_id").description("Client user identifier") 
      .modelRef(new ModelRef("string")).parameterType("header").required(true).build(); 

    return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()) 
     .paths(PathSelectors.any()).build() 
     .globalOperationParameters(Lists.newArrayList(parameterClientUserId, parameterAuthorization)); 
    } 

И наконец импортировать Swagger конфигурации в главном Application класса на Спринг загрузки

@Import ({}) SwaggerConfiguration.class

+0

Спасибо за ответ. Пробовал это, но не получил конечной точки для ui. – Rauno