无法让 Swagger UI 与 Spring Boot 一起使用

新手上路,请多包涵

我正在尝试让 Swagger UI 与 Spring Boot 1.2.1 一起使用。我按照 https://github.com/martypitt/swagger-springmvc 上的说明进行操作,并在我的 spring 配置中添加了 @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 作为 URL,但这只是给出了“Whitelabel 错误页面”

更新:

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

原文由 Wim Deblauwe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 541
2 个回答

您的问题在于您的 SwaggerConfiguration 文件。您需要取出 @EnableWebMvc ,因为这会导致默认的 Spring Boot 视图解析器被默认的“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-自动配置

如果你想完全控制 Spring MVC,你可以添加自己的 @Configuration 注释为 @EnableWebMvc 。如果您想保留 Spring Boot MVC 功能,并且只想添加其他 MVC 配置(拦截器、格式化程序、视图控制器等),您可以添加自己的 @Bean 类型为 WebMvcConfigurerAdapter ,但 没有 @EnableWebMvc

我希望这有帮助。

原文由 Tamas 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有 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)

最后,我通过在我的依赖项中包含以下内容,解决了 UI 位置框显示“ 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

希望有帮助。

原文由 Lucas Ross 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进