【问题标题】:Got "Ambiguous handler methods mapped for '/v3/api-docs'" after migrating from SpringFox to SpringDoc从 SpringFox 迁移到 SpringDoc 后得到“为 '/v3/api-docs' 映射的模糊处理程序方法”
【发布时间】:2021-11-09 05:50:08
【问题描述】:

使用 Spring Boot 2.4.5 和 IntelliJ 2021.2。迁移后

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

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.5.10</version>
</dependency>

每次我访问http://localhost:8080/swagger-ui.html。页面说:

获取错误未定义 /v3/api-docs

当我检查日志时:

java.lang.IllegalStateException:为“/v3/api-docs”映射的不明确的处理程序方法:{public org.springframework.http.ResponseEntity springfox.documentation.oas.web.OpenApiControllerWebMvc.getDocumentation(java.lang.String, javax.servlet.http.HttpServletRequest),公共 java.lang.String org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(javax.servlet.http.HttpServletRequest,java.lang.String) 抛出 com.fasterxml.jackson.core。 JsonProcessingException} 在 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:426) 在 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:377) 在 org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:125) 在 org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:67) 在 org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:498) 在 org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1257) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)

似乎有一个与 SpringFox 相同路径的重复处理程序方法,我将如何从 SpringFox 中删除该方法(它不再存在于我的 pom 文件中)?

【问题讨论】:

  • 通过执行依赖分析来寻找 Springfox 依赖并摆脱它们。您似乎已经删除了springfox-boot-starter,但据我回忆,Swagger-UI 应该有另一个 Springfox 依赖项

标签: spring-boot springfox springdoc


【解决方案1】:

你还有这两个依赖吗?我有同样的问题,除了 webflux。经过一番挖掘,我发现了以下内容:

  • springdoc-openapi-webflux-core-1.5.10:OpenAPIWebfluxResource.class
  • springfox-oas-3.0.0:OpenAPIControllerWebFlux.class

这两个类都为“/v3/api-docs”映射创建处理程序。正如 springdoc 文档所警告的那样,它们是不兼容的:

https://springdoc.org/#differentiation-to-springfox-project

11.35。与 Springfox 项目的差异化

  • OAS 3 于 2017 年 7 月发布,并且没有发布 springfox 来支持 OAS 3。springfox 目前仅涵盖 swagger 2 与 Spring Boot 的集成。最新发布日期是 2018 年 6 月。因此,在维护方面,最近严重缺乏支持。
  • ...
  • 我们仅依赖 swagger-annotations 和 swagger-ui 官方库。
  • ...

11.36。如何使用 springdoc-openapi 迁移到 OpenAPI 3

  • springdoc-openapi 和 springfox 没有关系。如果你想迁移到 OpenAPI 3:
  • 把springfox的所有依赖和相关代码去掉
  • 添加 springdoc-openapi-ui 依赖
  • 如果您不想从根路径提供 UI 或与现有配置发生冲突,您只需更改以下属性:

springdoc.swagger-ui.path=/you-path/swagger-ui.html

【讨论】:

    猜你喜欢
    • 2020-04-05
    • 1970-01-01
    • 2022-12-08
    • 2020-06-03
    • 2023-01-30
    • 2016-05-11
    • 2019-04-14
    • 2012-03-14
    • 2015-07-06
    相关资源
    最近更新 更多