无法让Swagger UI与Spring启动一起使用

时间:2015-01-09 13:40:23

标签: spring-boot swagger swagger-ui

我试图让Swagger UI与Spring Boot 1.2.1一起使用。我按照https://github.com/martypitt/swagger-springmvc的说明操作,并在弹簧配置中添加了@EnableSwagger

当我转到http://localhost:8080/api-docs时,我现在回来了JSON,但没有好的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作为网址,但这只是提供了“白标错误页面”

更新

我在Github上创建了一个测试项目来显示问题:https://github.com/wimdeblauwe/springboot-swagger-test

7 个答案:

答案 0 :(得分:27)

您的问题出在您的SwaggerConfiguration文件中。您需要取出@EnableWebMvc,因为这会导致默认的“SpringWebMvc”覆盖默认的Spring Boot视图解析器,它以不同的方式提供静态内容。

默认情况下,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

我希望这会有所帮助。

答案 1 :(得分:2)

我有swagger-ui v0.4(使用spring v4.14&amp; 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)

最后,我通过用户界面的位置框修复了问题,显示了&#34; http://localhost:8080 $ {pageContext.request.contextPath} / api-docs&#34;将其包含在我的依赖项中:

<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

希望有所帮助。

答案 2 :(得分:1)

我遇到同样的问题,但此链接适用于我:http://localhost:8080/sdoc.jsp

它预先填充了swagger ui资源网址框: http://localhost:8080 $ {pageContext.request.contextPath} / API-文档

当我手动编辑它时删除$ {pageContext.request.contextPath}并点击浏览它显示我的api文档,我甚至可以成功地尝试我的端点。所以肯定是一个问题,但可能没有拿起$ {pageContext.request / contextPath}。

查看javascript的源代码: url:window.location.origin +“$ {pageContext.request.contextPath} / api-docs”

关于静态swagger ui html我把这篇文章编码为:

discoveryUrl: “./资源list.json”

我希望这有点帮助

答案 3 :(得分:0)

如果您在springfox swagger-ui 3.x或更高版本中遇到此问题。

尝试下面的网址。它对我有用。

http://localhost:8080/swagger-ui /

有关完整的swagger文档步骤,请参阅: http://muralitechblog.com/swagger-rest-api-dcoumentation-for-spring-boot/

答案 4 :(得分:0)

正如上面 Tamas 所指出的,问题在于使用 @EnableWebMvc,它绕过了默认设置并跳过了 Swagger 需要的一些东西。对我来说,将其切换到 @EnableSwagger2 足以解决我的项目中出现类似症状的问题。

答案 5 :(得分:-1)

我已经为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();
    }
}

答案 6 :(得分:-2)

我建议您使用@ 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>