Spring Boot introduce el manejo de errores de Swagger

Tabla de contenido

1. Descripción del error

2. Encuentra la causa

2.1 El código del autor antes

 3. Instrucciones para la resolución de problemas

4. Soluciones

4.1 Introducir el paquete springdoc en pom.xml

4.2 Crear un archivo de configuración (se puede omitir)

4.3 Agregar anotaciones al controlador

4.4 Ver la documentación de la interfaz

 4.5 Anotaciones comunes


1. Descripción del error

La versión 2.9.2 de swagger se introdujo en el proyecto java, pero no se pudo iniciar normalmente y el error se informó de la siguiente manera:

2023-06-25T16:20:09.152+08:00 ERROR 38980 --- [reiniciadoMain] osboot.SpringApplication: la ejecución de la aplicación falló java.lang.TypeNotPresentException: escriba javax.servlet.http.HttpServletRequest no presente en java.base/sun .reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) ~[na:na] en java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[na: na] en java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] en java.base/sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier. java:68) ~[na:na] en java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138) ~[na:na] en java.base/sun.reflect.generics. tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] en java.base/sun.reflect.generics.repository.ClassRepository.computeSuperInterfaces(ClassRepository.java:117) ~[na:na] en java.base/sun.reflect.generics.repository.ClassRepository.getSuperInterfaces(ClassRepository.java:95) ~[na:na] en java. base/java.lang.Class.getGenericInterfaces(Class.java:1251) ~[na:na] en org.springframework.core.ResolvableType.getInterfaces(ResolvableType.java:500) ~[spring-core-6.0.8.jar :6.0.8] en org.springframework.core.ResolvableType.as(ResolvableType.java:448) ~[spring-core-6.0.8.jar:6.0.8] en org.springframework.core.ResolvableType.forClass(ResolvableType .java:1048) ~[spring-core-6.0.8.jar:6.0.8] en org.springframework.plugin.core.config.PluginRegistriesBeanDefinitionRegistrar.getTargetType(PluginRegistriesBeanDefinitionRegistrar.java:101) ~[spring-plugin-core- 2.0.0.RELEASE.jar:2.0.0.RELEASE] en org.springframework.plugin.core.config.PluginRegistriesBeanDefinitionRegistrar.registerBeanDefinitions(PluginRegistriesBeanDefinitionRegistrar.java:71) ~[spring-plugin-core-2.0.0.RELEASE.jar:2.0.0.RELEASE] en org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar.java: 86 ) ~[spring-context-6.0.8.jar:6.0.8] en org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:373) ~[spring-context-6.0.8.jar :6.0.8] en java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:729) ~[na:na] en org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:372) ~ [spring-context-6.0.8.jar:6.0.8] en org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) ~[spring-context-6.0.8.jar:6.0.8] en org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) ~ [primavera -context-6.0.8.jar:6.0.8] en org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:410) ~[spring-context-6.0.8.jar:6.0.8] en org .springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:283) ~[spring-context-6.0.8.jar:6.0.8] en org.springframework.context.support.PostProcessorRegistrationDelegate.invocarBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344) ~[spring-context-6.0.8.jar:6.0.8] en org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:115) ~[spring-context-6.0 .8.jar:6.0.8] en org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:747) ~[spring-context-6.0.8.jar:6.0.8] en org.springframework.context .support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:565) ~[spring-context-6.0.8.jar:6.0.8] en org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java: 146) ~[spring-boot-3.0.6.jar:3.0.6] en org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-3.0.6.jar:3.0.6] en org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-3.0.6.jar:3.0 .6] en org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-3.0.6.jar:3.0.6] en org.springframework.boot.SpringApplication.run(SpringApplication.java :1304) ~[spring-boot-3.0.6.jar:3.0.6] en org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[spring-boot-3.0.6.jar:3.0. 6] en com.aiforai.datalabel.DataLabelApplication.main(DataLabelApplication.java:22) ~[classes/:na] en java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na :na] en java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na] en org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-3.0.6.jar:3.0.6] Causado por: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest en java.base/jdk.internal.loader.BuiltinClassLoader.loadClass (BuiltinClassLoader.java:641) ~[na:na] en java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] en java.base/java.lang .ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] en java.base/java.lang.Class.forName0(Native Method) ~[na:na] en java.base/java.lang.Class. forName(Class.java:496) ~[na:na] en java.base/java.lang.Class.forName(Class.java:475) ~[na:na] en java.base/sun.reflect.generics. factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 marcos comunes omitidos 进程已结束,退出代码0HttpServletRequest en java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] en java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188 ) ~[na:na] en java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] en java.base/java.lang.Class.forName0(Método nativo) ~[ na:na] en java.base/java.lang.Class.forName(Class.java:496) ~[na:na] en java.base/java.lang.Class.forName(Class.java:475) ~[ na:na] en java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 marcos comunes omitidos 进程已结束,退出代码0HttpServletRequest en java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] en java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188 ) ~[na:na] en java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] en java.base/java.lang.Class.forName0(Método nativo) ~[ na:na] en java.base/java.lang.Class.forName(Class.java:496) ~[na:na] en java.base/java.lang.Class.forName(Class.java:475) ~[ na:na] en java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 marcos comunes omitidos 进程已结束,退出代码0na] en java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] en java.base/java.lang.Class.forName0(Native Method) ~[na:na] en java.base/java.lang.Class.forName(Class.java:496) ~[na:na] en java.base/java.lang.Class.forName(Class.java:475) ~[na:na] en java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 marcos comunes omitidos 进程已结束,退出代码0na] en java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] en java.base/java.lang.Class.forName0(Native Method) ~[na:na] en java.base/java.lang.Class.forName(Class.java:496) ~[na:na] en java.base/java.lang.Class.forName(Class.java:475) ~[na:na] en java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 marcos comunes omitidos 进程已结束,退出代码0

2. Encuentra la causa

Busqué varios métodos en Internet, incluida la clonación de códigos de otras personas, y siento que son exactamente iguales, por qué otros pueden hacerlo, pero el mío no. Hasta que vi una descripción del blog:

Siento que lo haré en un instante  , sí, es un problema de compatibilidad de versiones, solo haz lo que dices

2.1 El código del autor antes

La versión de arranque de primavera es 3+

 La versión swagger es 2+

 3. Instrucciones para la resolución de problemas

  • La integración de la versión 2.0 de swagger y la versión 3.x de spring boot no es posible por el momento, porque la capa subyacente de swagger depende del paquete de dependencia de javax, y la versión 3.x de spring boot son todos paquetes dependientes de jakarta, generalmente spring boot 2.5 y anteriores Está bien, pero si desea iniciar Spring Boot con la versión 2.5 o superior, obtendrá un error
  • Por lo tanto, springfox ya no se puede usar aquí, y debe ser reemplazado por algo más, como el springdoc usado por el autor.
     

4. Soluciones

4.1 Introducir el paquete springdoc en pom.xml

Esto ya contiene swagger, no te preocupes por cómo introducir 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 Crear un archivo de configuración (se puede omitir)

Cree SpringDocConfig.java en la carpeta de configuración y agregue el siguiente código

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

4.3 Agregar anotaciones al controlador

4.4 Ver la documentación de la interfaz

Ingrese http://localhost:9090/swagger-ui/index.html#/ en la barra de direcciones

Modifique la ip y el puerto usted mismo, y luego podrá ver la interfaz, lo que significa que la configuración de swagger es exitosa

 4.5 Anotaciones comunes

Un autor ya lo ha escrito muy claramente, así que no lo repetiré aquí, haga clic aquí para ver

Supongo que te gusta

Origin blog.csdn.net/liuxin00020/article/details/131394536
Recomendado
Clasificación