Излишне говорить, что я знаю, что есть масса вопросов по этой же теме, но я застрял, пытаясь исправить это уже 2 дня, и большая часть того, что я читал, устарело.
Так что да.. это то, что у меня есть прямо сейчас:
Грейдл:
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).
Есть много руководств, подобных этим, в которых утверждается, что все вышеперечисленное заставит работать swagger-ui:
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 из git swagger-ui в ваш проект.
Также такое отображение:
@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?
РЕДАКТИРОВАТЬ: найдено решение.
На случай, если кто-то еще наткнется на это, проблема в том, что если у вас есть сопоставление запроса, которое принимает параметр @RequestMapping("/{param}")
, dispatcherServlet больше не сопоставляет /** с 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/");
}
}