Невозможно получить интерфейс Swagger с загрузкой Spring
Я пытаюсь заставить пользовательский интерфейс Swagger работать с Spring Boot 1.2.1. Я выполнил инструкции https://github.com/martypitt/swagger-springmvc, и я добавил @EnableSwagger
в мой конфигуратор Spring.
В настоящее время я возвращаюсь к JSON, когда я перехожу к http://localhost:8080/api-docs
, но не имеет хорошего HTML.
Я использую Maven и добавил зависимость от swagger-ui:
<dependency>
<groupId>org.ajar</groupId>
<artifactId>swagger-spring-mvc-ui</artifactId>
<version>0.4</version>
</dependency>
Это мой полный список зависимостей:
<dependencies>
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.9.4</version>
</dependency>
<dependency>
<groupId>org.ajar</groupId>
<artifactId>swagger-spring-mvc-ui</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Я также пробовал http://localhost:8080/docs/index.html
в качестве URL-адреса, но это просто дает "страницу ошибок Whitelabel"
Update:
Я создал тестовый проект на Github, чтобы показать проблему: https://github.com/wimdeblauwe/springboot-swagger-test
Ответы
Ответ 1
Ваша проблема заключается в вашем файле SwaggerConfiguration
. Вам нужно вынуть @EnableWebMvc
, потому что это приведет к тому, что результирующее изображение по умолчанию Spring Boot View будет перезаписано по умолчанию "SpringWebMvc", которое по-разному ставит контент.
По умолчанию Spring Boot будет обслуживать статический контент из любого из следующих каталогов:
- /META-INF/ресурсы/
- /ресурсы/
- /статический/
- /государственный/
включая webjars.
У меня была та же проблема, и я нашел это в документации: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-auto-configuration
Если вы хотите полностью контролировать Spring MVC, вы можете добавить свой собственный @Configuration
, аннотированный с помощью @EnableWebMvc
. Если вы хотите сохранить функции Spring Boot MVC, и вы просто хотите добавить дополнительную конфигурацию MVC (перехватчики, форматировщики, контроллеры представлений и т.д.), Вы можете добавить свой собственный @Bean
типа WebMvcConfigurerAdapter
, но без @EnableWebMvc
.
Надеюсь, это поможет.
Ответ 2
У меня есть swagger-ui v0.4 (с spring v4.14 и swagger-springmvc v0.9.4) работает нормально, хотя сначала у меня были некоторые подобные проблемы. Кажется, этот класс делает трюк.
@Configuration
@EnableSwagger
public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Autowired
private SpringSwaggerConfig springSwaggerConfig;
@Bean
public SwaggerSpringMvcPlugin customImplementation() {
return new SwaggerSpringMvcPlugin(springSwaggerConfig).apiInfo(
apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfo(/* strings */);
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
Я считаю, что релевантная вещь - переопределенная configureDefaultServletHandling
. И на моем главном WebApplicationInitializer
у меня есть:
@Import(SwaggerConfig.class)
Наконец, я исправил проблему с полем местоположения пользовательского интерфейса, в котором показано " http://localhost:8080 ${pageContext.request.contextPath}/api-docs" включив это в мои зависимости:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<version>8.0.15</version>-->
<scope>provided</scope>
</dependency>
Это обеспечивает что-то, что связано с обработкой JSP. Он включен в зависимости от spring-boot
, но обычно он не provided
.
Надеюсь, что это поможет.
Ответ 3
У меня такая же проблема, но эта ссылка работает для меня: http://localhost:8080/sdoc.jsp
Он предварительно заполняет ячейку url ресурса swagger с:
http://localhost:8080 ${pageContext.request.contextPath}/api-docs
и когда я вручную отредактировал его, удалив ${pageContext.request.contextPath} и нажав Explore, он показывает мне мой api doc, и я могу даже попробовать свои конечные точки успешно. Так что определенно проблема, но, вероятно, не собирающая ${pageContext.request/contextPath}.
Глядя на источник, у javascript есть:
url: window.location.origin + "$ {pageContext.request.contextPath}/api-docs"
на статическом swagger ui html У меня этот кусок закодирован как:
discoveryUrl: "./ресурсов list.json"
Надеюсь, это немного полезно
Ответ 4
Я сделал отдельную конфигурацию для Swagger, и моя проблема заключалась в том, что без @EnableAutoConfiguration
он работал неправильно.
@Configuration
@EnableSwagger2
@EnableAutoConfiguration
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
Ответ 5
Я бы предложил вам использовать тег @EnableSwagger2 и выполнить следующие шаги и код здесь: https://github.com/sanketsw/SpringBoot_REST_API
Также я использую следующую зависимость, которая отлично работает:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>