HCRM博客

Swagger使用过程中常见报错解析与解决,Swagger API调试高频报错全解析,从问题根源到实战解决方案,(标题设计说明,1.突出高频报错强化痛点 2.全解析彰显系统性 3.采用根源→方案递进结构 4.包含SEO关键词API调试和解决方案 5.保持技术文档的专业性同时提升可读性)

Swagger报错分析与解决指南

Swagger 是一个强大的 API 文档生成工具,但在实际应用中可能会遇到各种报错,本文将详细解析几种常见的 Swagger 报错,并给出相应的解决方案,通过这些步骤,您能够快速定位并解决问题,确保您的 API 文档顺利生成和访问。

Swagger使用过程中常见报错解析与解决,Swagger API调试高频报错全解析,从问题根源到实战解决方案,(标题设计说明,1.突出高频报错强化痛点 2.全解析彰显系统性 3.采用根源→方案递进结构 4.包含SEO关键词API调试和解决方案 5.保持技术文档的专业性同时提升可读性)-图1
(图片来源网络,侵权删除)

一、Swagger简介

Swagger 是当前世界上最流行的 API 框架之一,采用可视化的 RestFul 风格,是一种 API 文档在线自动生成工具,它能够在前后端分离开发中,帮助前端人员及时了解后端提供的接口,从而减少沟通成本。

二、常见报错及解决方法

1.路径匹配错误

报错信息:

  • Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

原因分析:

Springfox 使用的路径匹配是基于AntPathMatcher 的,而 Spring Boot 2.6.X 使用的是PathPatternMatcher

解决方法:

Swagger使用过程中常见报错解析与解决,Swagger API调试高频报错全解析,从问题根源到实战解决方案,(标题设计说明,1.突出高频报错强化痛点 2.全解析彰显系统性 3.采用根源→方案递进结构 4.包含SEO关键词API调试和解决方案 5.保持技术文档的专业性同时提升可读性)-图2
(图片来源网络,侵权删除)

方法一:添加注解

在配置类上添加@EnableWebMvc 注解来改变匹配规则。

  • @Configuration
  • @EnableSwagger2
  • @EnableWebMvc
  • public class SwaggerConfig { ... }

方法二:修改配置文件

application.yamlapplication.properties 文件中添加以下语句:

  • spring.mvc.pathmatch.matchingstrategy=ant_path_matcher

或者:

  • spring.mvc.pathmatch.matchingstrategy=ant_path_matcher

方法三:降低版本

Swagger使用过程中常见报错解析与解决,Swagger API调试高频报错全解析,从问题根源到实战解决方案,(标题设计说明,1.突出高频报错强化痛点 2.全解析彰显系统性 3.采用根源→方案递进结构 4.包含SEO关键词API调试和解决方案 5.保持技术文档的专业性同时提升可读性)-图3
(图片来源网络,侵权删除)

降低 SpringFox 的版本至 2.5.* 版本即可。

2.目录结构问题

报错信息:

  • This application has no explicit mapping for /error, so you are seeing this as a fallback.

原因分析:

idea 的目录结构出现问题,SpringApplication 的启动类应该在最外层,包含所有子包,初学者很容易犯的错误!路径请求出现问题,找不到请求所对应的真实路径。

解决方法:

实现WebMvcConfigurer 类,重写addResourceHandlers 接口,代码结构如下:

  • @EnableWebMvc
  • @Configuration
  • @EnableSwagger2
  • public class SwaggerConfig implements WebMvcConfigurer {
  • @Override
  • public void addResourceHandlers(ResourceHandlerRegistry registry) {
  • registry.addResourceHandler("/**").addResourceLocations("classpath:/METAINF/resources/");
  • }
  • }

3.依赖问题

报错信息:

引入三方 UI 依赖(如 Knife4j)时,访问doc.html 报错。

原因分析:

可能是当前环境拦截了 Swagger 默认的静态资源。

解决方法:

在配置类文件中实现WebMvcConfigurer 接口并重写addResourceHandlers 方法:

  • @Configuration
  • public class WebMvcConfig implements WebMvcConfigurer {
  • @Override
  • public void addResourceHandlers(ResourceHandlerRegistry registry) {
  • registry.addResourceHandler("/swaggerui/**")
  • .addResourceLocations("classpath:/METAINF/resources/webjars/springfoxswaggerui/");
  • registry.addResourceHandler("/swaggerui.html").addResourceLocations("classpath:/METAINF/resources/");
  • registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/METAINF/resources/");
  • registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/METAINF/resources/webjars/");
  • }
  • }

4.权限受限无法访问

原因分析:

项目使用了 Spring Security,但没有对 Swagger 的资源路径进行匿名访问配置。

解决方法:

确保 Swagger 的资源路径被允许匿名访问,

  • @Configuration
  • @EnableWebSecurity
  • public class SecurityConfig extends WebSecurityConfigurerAdapter {
  • @Override
  • protected void configure(HttpSecurity http) throws Exception {
  • http.authorizeRequests()
  • .antMatchers("/swaggerui.html", "/webjars/", "/v2/", "/swaggerresources/**").permitAll()
  • .anyRequest().authenticated();
  • }
  • }

5.Controller 注解使用错误

原因分析:

错误的使用了@Controller 注解,应该使用@RestController

解决方法:

将控制器中的@Controller 改为@RestController

  • @RestController
  • public class MyController { ... }

三、FAQs

Q1:如何更改 Swagger 的版本?

A1:在 Maven 项目的pom.xml 文件中修改 Swagger 相关依赖的版本,要使用 2.9.2 版本,可以这样配置:

  • <dependency>
  • <groupId>io.springfox</groupId>
  • <artifactId>springfoxswagger2</artifactId>
  • <version>2.9.2</version>
  • </dependency>
  • <dependency>
  • <groupId>io.springfox</groupId>
  • <artifactId>springfoxswaggerui</artifactId>
  • <version>2.9.2</version>
  • </dependency>

如果需要迁移到新版本,请参考官方文档进行调整。

Q2:如何解决 Swagger UI 界面无法访问的问题?

A2:确保正确配置了WebMvcConfigurer 并重写了addResourceHandlers 方法,检查是否遗漏了必要的依赖或注解,如@EnableSwagger2@EnableWebMvc,确认访问路径是否正确,通常为http://localhost:8080/swaggerui/index.html

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/gz/13743.html

分享:
扫描分享到社交APP
上一篇
下一篇