Spring Boot introduit la gestion des erreurs swagger

Table des matières

1. Description de l'erreur

2. Trouvez la cause

2.1 Le code de l'auteur avant

 3. Instructions de résolution de problèmes

4. Solutions

4.1 Introduire le package springdoc dans pom.xml

4.2 Créer un fichier de configuration (peut être omis)

4.3 Ajouter des annotations au contrôleur

4.4 Afficher la documentation de l'interface

 4.5 Annotations communes


1. Description de l'erreur

La version swagger 2.9.2 a été introduite dans le projet java, mais elle n'a pas pu être démarrée normalement et l'erreur a été signalée comme suit :

2023-06-25T16:20:09.152+08:00 ERREUR 38980 --- [ restartedMain] osboot.SpringApplication : L'exécution de l'application a échoué .reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:117) ~[na:na] sur java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[na: na] sur java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] sur java.base/sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier. java:68) ~[na:na] sur java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138) ~[na:na] sur java.base/sun.reflect.generics. tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] sur java.base/sun.reflect.generics.repository.ClassRepository.computeSuperInterfaces(ClassRepository.java:117) ~[na:na] sur java.base/sun.reflect.generics.repository.ClassRepository.getSuperInterfaces(ClassRepository.java:95) ~[na:na] sur java. base/java.lang.Class.getGenericInterfaces(Class.java:1251) ~[na:na] à org.springframework.core.ResolvableType.getInterfaces(ResolvableType.java:500) ~[spring-core-6.0.8.jar :6.0.8] sur org.springframework.core.ResolvableType.as(ResolvableType.java:448) ~[spring-core-6.0.8.jar:6.0.8] sur org.springframework.core.ResolvableType.forClass(ResolvableType .java:1048) ~[spring-core-6.0.8.jar:6.0.8] sur org.springframework.plugin.core.config.PluginRegistriesBeanDefinitionRegistrar.getTargetType(PluginRegistriesBeanDefinitionRegistrar.java:101) ~[spring-plugin-core- 2.0.0.RELEASE.jar:2.0.0.RELEASE] sur org.springframework.plugin.core.config.PluginRegistriesBeanDefinitionRegistrar.registerBeanDefinitions(PluginRegistriesBeanDefinitionRegistrar.java:71) ~[spring-plugin-core-2.0.0.RELEASE.jar:2.0.0.RELEASE] à org.springframework.context.annotation.ImportBeanDefinitionRegistrar.registerBeanDefinitions(ImportBeanDefinitionRegistrar. java:86 ) ~[spring-context-6.0.8.jar:6.0.8] sur org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.lambda$loadBeanDefinitionsFromRegistrars$1(ConfigurationClassBeanDefinitionReader.java:373) ~[spring-context-6.0.8.jar :6.0.8] sur java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:729) ~[na:na] sur org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:372) ~ [spring-context-6.0.8.jar:6.0.8] sur org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:148) ~[spring-context-6.0.8.jar:6.0.8] à org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) ~[printemps -context-6.0.8.jar:6.0.8] sur org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:410) ~[spring-context-6.0.8.jar:6.0.8] sur org .springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:283) ~[spring-context-6.0.8.jar:6.0.8] sur 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] sur org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:747) ~[spring-context-6.0.8.jar:6.0.8] sur org.springframework.context .support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:565) ~[spring-context-6.0.8.jar:6.0.8] à org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java : 146) ~[spring-boot-3.0.6.jar:3.0.6] sur org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-3.0.6.jar:3.0.6] à org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-3.0.6.jar:3.0 .6] sur org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-3.0.6.jar:3.0.6] sur org.springframework.boot.SpringApplication.run(SpringApplication.java :1304) ~[spring-boot-3.0.6.jar:3.0.6] sur org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[spring-boot-3.0.6.jar:3.0. 6] à com.aiforail.datalabel.DataLabelApplication.main(DataLabelApplication.java:22) ~[classes/:na] à java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na :na] sur java.base/java.lang.reflect.Method.invoke(Method.java:578) ~[na:na] sur org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java :49) ~[spring-boot-devtools-3.0.6.jar:3.0.6] Causé par : java.lang.ClassNotFoundException : javax.servlet.http.HttpServletRequest sur java.base/jdk.internal.loader.BuiltinClassLoader.loadClass (BuiltinClassLoader.java:641) ~[na:na] sur java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] sur java.base/java.lang .ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] sur java.base/java.lang.Class.forName0 (méthode native) ~[na:na] sur java.base/java.lang.Class. forName(Class.java:496) ~[na:na] sur java.base/java.lang.Class.forName(Class.java:475) ~[na:na] sur java.base/sun.reflect.generics. factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 cadres communs omis 进程已结束,退出代码0HttpServletRequest sur java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] sur java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188 ) ~[na:na] sur java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] sur java.base/java.lang.Class.forName0 (méthode native) ~[ na:na] sur java.base/java.lang.Class.forName(Class.java:496) ~[na:na] sur java.base/java.lang.Class.forName(Class.java:475) ~[ na:na] sur java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 images communes omises 进程已结束,退出代码0HttpServletRequest sur java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] sur java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188 ) ~[na:na] sur java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] sur java.base/java.lang.Class.forName0 (méthode native) ~[ na:na] sur java.base/java.lang.Class.forName(Class.java:496) ~[na:na] sur java.base/java.lang.Class.forName(Class.java:475) ~[ na:na] sur java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 images communes omises 进程已结束,退出代码0na] sur java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] sur java.base/java.lang.Class.forName0 (méthode native) ~[na:na] sur java.base/java.lang.Class.forName(Class.java:496) ~[na:na] à java.base/java.lang.Class.forName(Class.java:475) ~[na:na] à java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 cadres communs omis 进程已结束,退出代码0na] sur java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] sur java.base/java.lang.Class.forName0 (méthode native) ~[na:na] sur java.base/java.lang.Class.forName(Class.java:496) ~[na:na] à java.base/java.lang.Class.forName(Class.java:475) ~[na:na] à java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] ... 35 cadres communs omis 进程已结束,退出代码0

2. Trouvez la cause

J'ai cherché diverses méthodes sur Internet, y compris le clonage des codes d'autres personnes, et j'ai l'impression qu'ils sont exactement les mêmes, pourquoi d'autres peuvent le faire, mais pas le mien. Jusqu'à ce que je voie une description de blog :

J'ai l'impression que je vais le faire dans un instant  , oui, c'est un problème de compatibilité de version, faites simplement ce que vous dites

2.1 Le code de l'auteur avant

La version de démarrage à ressort est 3+

 La version swagger est 2+

 3. Instructions de résolution de problèmes

  • L'intégration de la version swagger 2.0 et de la version spring boot 3.x n'est pas possible pour le moment, car la couche sous-jacente de swagger dépend du package de dépendance javax, et la version spring boot 3.x est tous les packages dépendants de jakarta, généralement spring boot 2.5 et moins C'est bon, mais si vous voulez démarrer Spring Boot avec la version 2.5 ou plus, vous obtiendrez une erreur
  • Par conséquent, springfox ne peut plus être utilisé ici, et il doit être remplacé par autre chose, comme le springdoc utilisé par l'auteur.
     

4. Solutions

4.1 Introduire le package springdoc dans pom.xml

Cela contient déjà de la fanfaronnade, ne vous inquiétez pas de la façon d'introduire la fanfaronnade

        <!-- 生成接口文档 -->
        <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 Créer un fichier de configuration (peut être omis)

Créez SpringDocConfig.java sous le dossier config et ajoutez le code suivant

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

4.3 Ajouter des annotations au contrôleur

4.4 Afficher la documentation de l'interface

Entrez http://localhost:9090/swagger-ui/index.html#/ dans la barre d'adresse

Modifiez l'adresse IP et le port par vous-même, puis vous pouvez voir l'interface, ce qui signifie que la configuration swagger est réussie

 4.5 Annotations communes

Un auteur l'a déjà écrit très clairement, donc je ne le répéterai pas ici, cliquez ici pour le voir

Je suppose que tu aimes

Origine blog.csdn.net/liuxin00020/article/details/131394536
conseillé
Classement