无法获取Swagger UI与 Spring Boot 配合使用

dbf7pr2w  于 2022-11-06  发布在  Spring
关注(0)|答案(8)|浏览(166)

我正在尝试让Swagger UI与Sping Boot 1.2.1一起工作。我按照X1 E0 F1 X的说明操作,并在我的Spring配置中添加了X1 M0 N1 X。
当我转到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,但这只是给出了“白标错误页”
更新:
我在Github上创建了一个测试项目来说明这个问题:https://github.com/wimdeblauwe/springboot-swagger-test

5w9g7ksd

5w9g7ksd1#

您的问题出在您的SwaggerConfiguration档案中。您需要移除@EnableWebMvc,因为这会造成预设的Sping Boot 检视解析程式被预设的'SpringWebMvc'所覆写,而这个预设的解析程式会以不同的方式提供静态内容。
默认情况下,Sping Boot 将提供以下任何目录中的静态内容:

  • /中继INF/资源/
  • /资源/
  • /静态/
  • /公开/

包括webjar)的安全性。
我遇到了同样的问题,我在文档中找到了这个问题: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。如果你想保留Sping Boot MVC特性,并且你只想添加额外的MVC配置(拦截器,格式化程序,视图控制器等),你可以添加你自己的@Bean类型WebMvcConfigurerAdapter,但是不带@EnableWebMvc
我希望这能帮上忙。

brtdzjyr

brtdzjyr2#

我有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
希望能有所帮助。

wlsrxk51

wlsrxk513#

如果您在使用springfox swagger-ui 3.x或更高版本时遇到此问题..
试试下面的网址..它对我有用..
http://localhost:8080/swagger-ui /
有关完整的swagger文档编制步骤,请参阅:http://muralitechblog.com/swagger-rest-api-dcoumentation-for-spring-boot/

q35jwt9p

q35jwt9p4#

我有同样的问题,但这个链接为我工作:http://localhost:8080/sdoc.jsp
它会在swagger ui资源url框中预先填充以下内容:http://localhost:8080 ${页面上下文.请求.上下文路径}/api-docs
当我手动编辑它删除${pageContext.request.contextPath}并点击Explore时,它显示了我的API文档,我甚至可以成功地尝试我的端点。所以肯定是一个问题,但可能没有获得${pageContext.request/contextPath}。
查看javascript的源代码:URL:窗口.位置.源位置+“${页面上下文.请求.上下文路径}/api-docs”
在一个静态的 swagger 的UI html我有这一块是编码为:
发现URL:“./资源列表. json”
我希望这对你有帮助

xbp102n0

xbp102n05#

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

3htmauhk

3htmauhk6#

我在我的项目中遇到过同样的问题。通过以下步骤解决了问题。

在pom.xml中添加了以下依赖项

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>3.0.0</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>3.0.0</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

在项目级别中添加了swagger2 ui配置,如下所示

@Configuration
@EnableSwagger2
@EnableAutoConfiguration
public class SpringFoxConfig {  

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

}

然后就可以得到swagger用户界面文档http://localhost:8080/swagger-ui/

昂首阔步的API文档http://localhost:8080/v2/api-docs

qyswt5oh

qyswt5oh7#

我已经为Swagger做了单独的配置,我的问题是如果没有X1M0N1X,它就不能正常工作。

@Configuration
@EnableSwagger2
@EnableAutoConfiguration
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}
vpfxa7rd

vpfxa7rd8#

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

相关问题