当前位置: 首页 > 知识库问答 >
问题:

从SpringFox迁移到SpringDoc后,获得了“为“/v3/api文档”映射的不明确处理程序方法”

郏博瀚
2023-03-14

使用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文档

当我检查日志时:

java.lang.IllegalStateException:为“/v3/api文档”映射的不明确处理程序方法:{public org.springframework.http.ResponseEntity springfox.documentation.oas.web.OpenApiControllerWebMvc.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest),public 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文件中)?

共有2个答案

麹耘豪
2023-03-14

删除swagger依赖项,springfox依赖项。只添加openapi依赖项就足够了。

    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.6.6</version>
    </dependency>
阎慈
2023-03-14

您是否仍然同时具有这两个依赖项?除了webflux,我也有同样的问题。经过一番挖掘,我发现:

  • springdoc-openapi-webFlux-core-1.5.10: OpenAPIWebFluxResource.class
  • springfox-oas-3.0.0: OpenAPIControlllerWebFlux.class

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

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

11.35与Springfox项目的区别

  • OAS 3于2017年7月发布,springfox没有发布支持OAS 3的版本。springfox目前只覆盖了与Spring Boot集成的swagger 2。最新发布日期是2018年6月。因此,在维护方面,最近非常缺乏支持

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

  • springdoc openapi和springfox之间没有关系。如果您想迁移到OpenAPI 3:

springdoc.swagger-ui.pathswagger-ui.html

 类似资料:
  • 我试着遵循以下几点: https://www.dariawan.com/tutorials/spring/documenting-spring-boot-rest-api-springdoc-openapi-3/ 如何处理注释,如:

  • 我正在使用mapstruct从一个DTO映射到另一个DTO。我有多个默认方法,但其中2个返回值为String,并且使用相同的类作为输入参数,这给我带来了“使用java MapStruct的模糊映射方法”错误。 错误:(16,7)Java:在将属性“java.lang.String StatusHistory”映射到java.util.Map:java.util.Map toMap(java.lan

  • 我用Java编写REST api,并使用Groovy和Spock进行测试。

  • 选项(Options) Glide v4 中的一个比较大的改动是Glide库处理选项(centerCrop(), placeholder() 等)的方式。在 v3 版本中,选项由一系列复杂的异构建造者(multityped builders)单独处理。在新版本中,由一个单一类型的唯一一个建造者接管一系列选项对象。Glide 的generated API进一步简化了这个操作:它会合并传入建造者的选项

  • 我需要公开一些在REST API方法中不直接使用的模型。 对于springfox,我使用Docket的方法以编程方式将模型添加到规范中: 如何使用springdoc? 我已经创建了一个带有dummy参数的dummy操作,其中包括所有必需的模型。但我觉得这种方法还有改进的空间。

  • 我有两种将实体映射到域的方法。 当我试图定义实体列表到域的映射方法时,我发现了用于映射集合元素的模糊映射方法。 有没有一种方法可以定义用于映射对象集合的方法