java Swagger 2问题 Spring Boot

nvbavucw  于 2023-03-21  发布在  Java
关注(0)|答案(7)|浏览(192)

我在Sping Boot 中遇到了Swagger集成问题。看看代码和错误片段。

<properties>
    <java.version>1.8</java.version>
    <swagger.version>2.9.2</swagger.version>
</properties>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>${swagger.version}</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>${swagger.version}</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-bean-validators</artifactId>
    <version>${swagger.version}</version>
</dependency>

-------------------应用类------------

@SpringBootApplication
@EnableSwagger2
public class ProducerApplication {

  public static void main(String[] args) {
    SpringApplication.run(ServletPocProducerApplication.class, args);
  }
  
  @Bean 
  public Docket api() { 
    return new Docket(DocumentationType.SWAGGER_2)
      .select() 
      .apis(RequestHandlerSelectors.any())
      .paths(PathSelectors.any())
      .build();
  }
}

堆栈跟踪

org.springframework.context.ApplicationContextException: Failed to start bean 
'documentationPluginsBootstrapper'; nested exception is 
 java.lang.NullPointerException: Cannot invoke 
"org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.toString()" 
because the return value of 
"springfox.documentation.spi.service.contexts.Orderings.patternsCondition(springfox.docume 
ntation.RequestHandler)" is null
   at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.13.jar:5.3.13]

我该怎么办?

tvokkenx

tvokkenx1#

我通过在application.properties中添加“spring.mvc.pathmatch.matching-strategy=ant-path-matcher”来解决这个问题。

6mw9ycah

6mw9ycah2#

很长一段时间以来,我一直试图解决这个问题,解决方案是:

  • a)将此添加到application.properties:*
spring.mvc.pathmatch.matching-strategy=ant-path-matcher
  • B)将其添加到application.yaml(或application.yml):*
spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
rlcwz9us

rlcwz9us3#

我知道这不能直接解决你的问题,但是考虑一下迁移到springdoc。Springfox在这一点上是如此的bug,使用起来很痛苦。我在2年前迁移到springdoc,因为它支持Spring WebFlux,我对此非常高兴。此外,它还支持Kotlin协程,我不确定Springfox是否支持。
如果您决定迁移,springdoc甚至有一个迁移指南。

drnojrws

drnojrws4#

添加这个“spring.mvc.pathmatch. matching-strategy =ant-path-matcher”到您的application.properties文件解决了这个问题。这是我使用的,我节省了很多麻烦。

piztneat

piztneat5#

对于spring-boot和swagger-ui之间的集成,将库添加到项目依赖项列表中(不需要额外的配置):

<dependency>
          <groupId>org.springdoc</groupId>
          <artifactId>springdoc-openapi-ui</artifactId>
          <version>1.5.12</version>
     </dependency>
  • 然后,Swagger UI页面将在http://server:port/context-path/swagger-ui.html提供,OpenAPI描述将在以下json格式的url中提供:http://server:port/context-path/v3/api-docs
  • server:服务器名称或IP
  • port:服务器端口
  • 上下文路径:应用程序的上下文路径
tzxcd3kk

tzxcd3kk6#

Replace These in Pom.xml

change the parent version to 2.5.0 

        <parent>
                <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.5.0</version>
         <relativePath /> <!-- lookup parent from repository -->
         </parent>
and add these 

     <!-- https://mvnrepository.com/artifact/io.springfox/springfox- swagger2 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId> io.springfox </groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.5.0</version> 
        </dependency>
1tu0hz3e

1tu0hz3e7#

我的建议是,当你使用spring-boot时,最好使用spring boot dependency for swagger。所以,spring-boot会照顾你的默认设置。

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

相关问题