SpringBoot引入swagger报错处理的解决方法

 更新时间:2023年06月27日 10:26:27   作者:山野里的小菊花  
这篇文章主要给大家介绍SpringBoot引入swagger是会出现报错的处理解决方法,文中有详细的解决过程,感兴趣的小伙伴可以跟着小编一起来学习吧

1. 报错说明

在java项目中引入swagger 2.9.2版本,无法正常启动,报错如下:

2023-06-25T16:20:09.152+08:00 ERROR 38980 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) ~[na:na] at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[na:na] at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] at java.base/sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68) ~[na:na] at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138) ~[na:na] at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] at java.base/sun.reflect.generics.repository.ClassRepository.computeSuperInterfaces(ClassRepository.java:117) ~[na:na] at java.base/sun.reflect.generics.repository.ClassRepository.getSuperInterfaces(ClassRepository.java:95) ~[na:na] at java.base/java.lang.Class.getGenericInterfaces(Class.java:1251) ~[na:na] at org.springframework.core.ResolvableType.getInterfaces(ResolvableType.java:500) ~[spring-core-6.0.8.jar:6.0.8] at org.springframework.core.ResolvableType.as(ResolvableType.java:448) ~[spring-core-6.0.8.jar:6.0.8] at org.springframework.core.ResolvableType.forClass(ResolvableType.java:1048) ~[spring-core-6.0.8.jar:6.0.8] at org.springframework.plugin.core.config.PluginRegistriesBeanDefinitionRegistrar.getTargetType(PluginRegistriesBeanDefinitionRegistrar.java:101) ~[spring-plugin-core-2.0.0.RELEASE.jar:2.0.0.RELEASE] at org.springframework.plugin.core.config.PluginRegistriesBeanDefinitionRegistrar.registerBeanDefinitions(PluginRegistriesBeanDefinitionRegistrar.java:71) ~[spring-plugin-core-2.0.0.RELEASE.jar:2.0.0.RELEASE] at org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java:86) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:373) ~[spring-context-6.0.8.jar:6.0.8] at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:729) ~[na:na] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:372) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:410) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:283) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:115) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:747) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:565) ~[spring-context-6.0.8.jar:6.0.8] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.0.6.jar:3.0.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-3.0.6.jar:3.0.6] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-3.0.6.jar:3.0.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-3.0.6.jar:3.0.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[spring-boot-3.0.6.jar:3.0.6] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[spring-boot-3.0.6.jar:3.0.6] at com.aiforail.datalabel.DataLabelApplication.main(DataLabelApplication.java:22) ~[classes/:na] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-3.0.6.jar:3.0.6] Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] at java.base/java.lang.Class.forName0(Native Method) ~[na:na] at java.base/java.lang.Class.forName(Class.java:496) ~[na:na] at java.base/java.lang.Class.forName(Class.java:475) ~[na:na] at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 common frames omitted 进程已结束,退出代码0

2. 查找原因

网上搜索了各种办法,包括clone别人的代码,感觉明明一模一样的,为什么别人就可以,自己的就不行。直到看到了某篇博客的描述:

感觉我瞬间好像会了 ,没错,就是版本兼容问题,说干就干

2.1 此前笔者的代码

spring boot版本为3+

swagger版本为2+

3. 问题解决说明

  • swagger 2.0版本和spring boot 3.x版本整合暂时是不行的,因为swagger的依赖底层用的是javax依赖包,而spring boot 3.x版本都是jakarta依赖包,一般是把spring boot2.5以下就可以了,但是想要2.5版本以上spring boot启动就会出报错
  • 因此这里不能再使用springfox,得换成别的,比如笔者使用的springdoc

4. 解决方案

4.1 在pom.xml引入springdoc包

这里面已经包含了swagger,不用担心如何引入swagger

        <!-- 生成接口文档 -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
            <version>2.0.2</version>
        </dependency>

4.2 创建配置文件(可省略)

在config文件夹下创建SpringDocConfig.java,添加以下代码

@Configuration
@OpenAPIDefinition(info = @Info(title = "数据标签管理系统", description = "数据标签管理", version = "1.0"))
@SecurityScheme(name = "token", type = SecuritySchemeType.HTTP, bearerFormat = "JWT", scheme = "bearer")
public class SpringDocConfig {
}

4.3 在controller加入注解

4.4 查看接口文档

在地址栏输入http://localhost:9090/swagger-ui/index.html#/

ip和端口自行修改,之后可看到界面,代表swagger配置成功

到此这篇关于SpringBoot引入swagger报错处理的解决方法的文章就介绍到这了,更多相关SpringBoot swagger报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 如何调用Python文件包括传参

    java 如何调用Python文件包括传参

    这篇文章主要介绍了java 调用Python文件包括传参的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Java中的LinkedHashSet集合解读

    Java中的LinkedHashSet集合解读

    这篇文章主要介绍了Java中的LinkedHashSet集合解读,LInkedHashSet这个容器不知道大家在平时的工作用的多吗,反正我基本上没有用过,所以,本文主要对于它的特点、使用场景、实现原理,做一个讲解,希望对大家平时的工作有所帮助,需要的朋友可以参考下
    2023-09-09
  • SpringCloud Alibaba微服务启动报错原因及解决方案

    SpringCloud Alibaba微服务启动报错原因及解决方案

    这篇文章给大家介绍了SpringCloud Alibaba微服务启动报错原因及解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-05-05
  • Java异常处理之java.lang.ClassCastException问题

    Java异常处理之java.lang.ClassCastException问题

    这篇文章主要介绍了Java异常处理之java.lang.ClassCastException问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Scala常用List列表操作方法示例

    Scala常用List列表操作方法示例

    这篇文章主要介绍了Scala常用List列表操作方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • SpringBoot自动装配原理及分析

    SpringBoot自动装配原理及分析

    SpringBoot通过@SpringBootApplication注解启动自动装配,其中@EnableAutoConfiguration导入AutoConfigurationImportSelect类,读取META-INF下的配置文件,根据@Conditional条件筛选并注入符合条件的Bean到IOC容器
    2025-09-09
  • 如何用java程序(JSch)运行远程linux主机上的shell脚本

    如何用java程序(JSch)运行远程linux主机上的shell脚本

    这篇文章主要介绍了如何用java程序(JSch)运行远程linux主机上的shell脚本,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Spring Boot 4.0 新特性深度解析与实战教程

    Spring Boot 4.0 新特性深度解析与实战教程

    基于Spring Framework 7.0构建,新版本聚焦​​性能革命​​、​​开发体验优化​​和​​云原生适配​​三大核心方向,为现代Java应用开发带来了颠覆性升级,本文给大家介绍Spring Boot 4.0 新特性深度解析与实战教程,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Java枚举的使用与反射应用方式

    Java枚举的使用与反射应用方式

    枚举类型是一种特殊的类,限定为固定实例集合,且是类型安全和线程安全的,枚举类型不可继承,但可以添加属性和方法,支持单例模式,枚举常量可以通过反射获取和操作,提供了灵活性和扩展性
    2024-09-09
  • IDEA项目如何实现打jar包

    IDEA项目如何实现打jar包

    这篇文章主要介绍了IDEA项目如何实现打jar包问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论