Spring Boot 2.6.0 / Spring Fox 3 – Bean ‘documentationPluginsBootstrapper’ konnte nicht gestartet werden

Lesezeit: 12 Minuten

Benutzeravatar von jvacaq
jvacaq

Ich versuche, ein Spring Boot-Projekt mit zu initiieren OpenJDK 15, Springboot 2.6.0, Springfox 3.

Wir arbeiten an einem Projekt, das ersetzt Netty als Webserver verwendet und stattdessen Jetty verwendet, da wir keine nicht blockierende Umgebung benötigen.

Im Code hängen wir hauptsächlich von Reactor API (Flux, Mono) ab, also können wir es nicht entfernen org.springframework.boot:spring-boot-starter-webflux Abhängigkeiten.

Ich habe das Problem repliziert, das wir in einem neuen Projekt haben: https://github.com/jvacaq/spring-fox.

Ich habe herausgefunden, dass diese Zeilen in unserem build.gradle Datei sind der Ursprung des Problems.

compile("org.springframework.boot:spring-boot-starter-web") {
   exclude module: "spring-boot-starter-tomcat"
}
compile("org.springframework.boot:spring-boot-starter-jetty")

Hier ist der build.gradle Datei:

plugins {
    id 'org.springframework.boot' version '2.6.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile("org.springframework.boot:spring-boot-starter-jetty")
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
    implementation "io.springfox:springfox-boot-starter:3.0.0"
}

test {
    useJUnitPlatform()
}

Ich habe den Befehl gegeben gradle clean bootrun. Das Ergebnis ist dieser Fehler:

gradle clean bootrun

> Task :bootRun FAILED

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.0)

2021-11-19 09:41:06.665  INFO 16666 --- [           main] c.e.springfox.SpringFoxApplication       : Starting SpringFoxApplication using Java 15.0.2 on advance-Inspiron-5379 with PID 16666 (/home/advance/projects/spring-fox/build/classes/java/main started by advance in /home/advance/projects/spring-fox)
2021-11-19 09:41:06.666  INFO 16666 --- [           main] c.e.springfox.SpringFoxApplication       : No active profile set, falling back to default profiles: default
2021-11-19 09:41:07.294  INFO 16666 --- [           main] org.eclipse.jetty.util.log               : Logging initialized @1132ms to org.eclipse.jetty.util.log.Slf4jLog
2021-11-19 09:41:07.396  INFO 16666 --- [           main] o.s.b.w.e.j.JettyServletWebServerFactory : Server initialized with port: 8080
2021-11-19 09:41:07.398  INFO 16666 --- [           main] org.eclipse.jetty.server.Server          : jetty-9.4.44.v20210927; built: 2021-09-27T23:02:44.612Z; git: 8da83308eeca865e495e53ef315a249d63ba9332; jvm 15.0.2+7-27
2021-11-19 09:41:07.417  INFO 16666 --- [           main] o.e.j.s.h.ContextHandler.application     : Initializing Spring embedded WebApplicationContext
2021-11-19 09:41:07.417  INFO 16666 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 713 ms
2021-11-19 09:41:07.474  INFO 16666 --- [           main] org.eclipse.jetty.server.session         : DefaultSessionIdManager workerName=node0
2021-11-19 09:41:07.474  INFO 16666 --- [           main] org.eclipse.jetty.server.session         : No SessionScavenger set, using defaults
2021-11-19 09:41:07.475  INFO 16666 --- [           main] org.eclipse.jetty.server.session         : node0 Scavenging every 660000ms
2021-11-19 09:41:07.480  INFO 16666 --- [           main] o.e.jetty.server.handler.ContextHandler  : Started [email protected]{application,/,[file:///tmp/jetty-docbase.8080.2024342829220941812/, jar:file:/home/advance/.gradle/caches/modules-2/files-2.1/io.springfox/springfox-swagger-ui/3.0.0/1e665fbe22148f7c36fa8a08e515a0047cd4390b/springfox-swagger-ui-3.0.0.jar!/META-INF/resources],AVAILABLE}
2021-11-19 09:41:07.480  INFO 16666 --- [           main] org.eclipse.jetty.server.Server          : Started @1318ms
2021-11-19 09:41:07.920  INFO 16666 --- [           main] o.e.j.s.h.ContextHandler.application     : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-11-19 09:41:07.920  INFO 16666 --- [           main] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-11-19 09:41:07.921  INFO 16666 --- [           main] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
2021-11-19 09:41:07.931  INFO 16666 --- [           main] o.e.jetty.server.AbstractConnector       : Started [email protected]{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2021-11-19 09:41:07.932  INFO 16666 --- [           main] o.s.b.web.embedded.jetty.JettyWebServer  : Jetty started on port(s) 8080 (http/1.1) with context path "https://stackoverflow.com/"
2021-11-19 09:41:07.934  WARN 16666 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null
2021-11-19 09:41:07.949  INFO 16666 --- [           main] o.e.jetty.server.AbstractConnector       : Stopped [email protected]{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2021-11-19 09:41:07.950  INFO 16666 --- [           main] org.eclipse.jetty.server.session         : node0 Stopped scavenging
2021-11-19 09:41:07.951  INFO 16666 --- [           main] o.e.j.s.h.ContextHandler.application     : Destroying Spring FrameworkServlet 'dispatcherServlet'
2021-11-19 09:41:07.951  INFO 16666 --- [           main] o.e.jetty.server.handler.ContextHandler  : Stopped [email protected]{application,/,[file:///tmp/jetty-docbase.8080.2024342829220941812/, jar:file:/home/advance/.gradle/caches/modules-2/files-2.1/io.springfox/springfox-swagger-ui/3.0.0/1e665fbe22148f7c36fa8a08e515a0047cd4390b/springfox-swagger-ui-3.0.0.jar!/META-INF/resources],STOPPED}
2021-11-19 09:41:07.958  INFO 16666 --- [           main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-11-19 09:41:07.970 ERROR 16666 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null
        at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.13.jar:5.3.13]
        at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
        at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.0.jar:2.6.0]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.0.jar:2.6.0]
        at com.example.springfox.SpringFoxApplication.main(SpringFoxApplication.java:10) ~[main/:na]
Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is null
        at springfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56) ~[springfox-spring-webmvc-3.0.0.jar:3.0.0]
        at springfox.documentation.RequestHandler.sortedPaths(RequestHandler.java:113) ~[springfox-core-3.0.0.jar:3.0.0]
        at springfox.documentation.spi.service.contexts.Orderings.lambda$byPatternsCondition$3(Orderings.java:89) ~[springfox-spi-3.0.0.jar:3.0.0]
        at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469) ~[na:na]
        at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:na]
        at java.base/java.util.TimSort.sort(TimSort.java:220) ~[na:na]
        at java.base/java.util.Arrays.sort(Arrays.java:1306) ~[na:na]
        at java.base/java.util.ArrayList.sort(ArrayList.java:1721) ~[na:na]
        at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:392) ~[na:na]
        at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]
        at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]
        at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]
        at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
        at springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider.requestHandlers(WebMvcRequestHandlerProvider.java:81) ~[springfox-spring-webmvc-3.0.0.jar:3.0.0]
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
        at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.withDefaults(AbstractDocumentationPluginsBootstrapper.java:107) ~[springfox-spring-web-3.0.0.jar:3.0.0]
        at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.buildContext(AbstractDocumentationPluginsBootstrapper.java:91) ~[springfox-spring-web-3.0.0.jar:3.0.0]
        at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.bootstrapDocumentationPlugins(AbstractDocumentationPluginsBootstrapper.java:82) ~[springfox-spring-web-3.0.0.jar:3.0.0]
        at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:100) ~[springfox-spring-web-3.0.0.jar:3.0.0]
        at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.13.jar:5.3.13]
        ... 14 common frames omitted


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':bootRun'.
> Process 'command '/home/advance/.sdkman/candidates/java/15.0.2-open/bin/java'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.9.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 2s
5 actionable tasks: 5 executed

Wie kann ich es lösen?

  • Ziehen Sie eine Migration in Betracht springdoc

    – Anatoly Shipov

    25. November 2021 um 5:19 Uhr

  • Danke, ich bin zu Springdoc migriert. Ich kann nicht auf eine Lösung vom Springfox-Team warten.

    – jvacaq

    25. November 2021 um 15:24 Uhr

  • Nur das Hinzufügen von @EnableWebMvc in der Hauptklasse löste das Problem. stackoverflow.com/a/70703081/5626568

    – ℛɑƒæĿᴿᴹᴿ

    13. Januar um 21:20 Uhr


  • Es ist kein triviales Unterfangen, ein Springfox-Setup nach Springdoc zu migrieren, wenn Ihre Konfiguration etwas komplex ist.

    – IcedDante

    18. Januar um 18:14 Uhr

  • Auch nach springdoc migriert. Die Komplexität dieser Aufgabe wird wahrscheinlich von Ihrem Projekt abhängen, aber es hat mein Problem gelöst und mich auf eine Bibliothek gebracht, die vor einem Monat statt vor anderthalb Jahren aktualisiert wurde.

    – matt forsythe

    18. März um 13:36 Uhr

Benutzeravatar von Andy Wilkinson
Andy Wilkinson

Dieses Problem wird verursacht durch a Fehler in Springfox. Es wird eine Annahme darüber getroffen, wie Spring MVC eingerichtet ist, die nicht immer zutrifft. Insbesondere wird davon ausgegangen, dass der Pfadabgleich von MVC den Ant-basierten Pfadabgleicher und nicht den PathPattern-basierten Abgleich verwendet. PathPattern-basiertes Matching ist seit einiger Zeit eine Option und seit Spring Boot 2.6 die Standardeinstellung.

Wie in den Versionshinweisen zu Spring Boot 2.6 beschriebenkönnen Sie die Konfiguration wiederherstellen, von der Springfox annimmt, dass sie durch die Einstellung verwendet wird spring.mvc.pathmatch.matching-strategy zu ant-path-matcher in deiner application.properties Datei. Beachten Sie, dass dies nur funktioniert, wenn Sie den Actuator von Spring Boot nicht verwenden. Der Actuator verwendet unabhängig von der Konfiguration immer PathPattern-basiertes Parsing matching-strategy. Eine Umstellung auf Springfox ist erforderlich, wenn Sie es mit dem Actuator in Spring Boot 2.6 und höher verwenden möchten.

  • Danke für deine Antwort. Das Hinzufügen der folgenden Zeile in application.properties hat jedoch nicht funktioniert. Und ich habe die gleiche Ausnahme. spring.mvc.pathmatch.matching-strategy=ant_path_matcher

    – Ubaid ur Rehman

    20. November 2021 um 14:38 Uhr


  • Auf Version Swagger 2 (2.9.2) funktioniert diese Lösung auch gut, vielen Dank

    – Smyhail

    5. Dezember 2021 um 18:46 Uhr

  • Mir ist aufgefallen, dass diese Lösung AUSSER mit ihr nicht kompatibel ist spring-boot-starter-actuator. Sobald das herausgerechnet ist, haben alle meine Submodule mit der ant_path_matcher-Lösung gearbeitet.

    – Paul Cuddihy

    5. Januar um 18:17 Uhr

  • Wie Paul oben kommentierte, spring-boot-starter-actuator müssen auch rausgeschmissen werden.

    – Yang Liu

    23. Januar um 22:04 Uhr

  • @gstackoverflow Ich glaube schon, ja. Bis es eine neue Springfox-Version gibt, müssen Sie entweder auf Spring Boot 2.5 downgraden oder von Springfox zu einer Alternative wie Springdoc wechseln. Leider scheint Springfox nicht mehr so ​​aktiv zu sein wie früher, daher würde ich trotzdem empfehlen, Alternativen in Betracht zu ziehen.

    – Andy Wilkinson

    26. Januar um 10:58 Uhr

Benutzeravatar von icyfire
Eisfeuer

Die im folgenden Problemkommentar erwähnte Problemumgehung scheint auch für Personen mit Federantrieb zu funktionieren. Nur das Ändern des Pfad-Matchers funktioniert nicht für Projekte, die den Aktuator verwenden.

  1. Setzen Sie sich ein application.properties Datei:

    spring.mvc.pathmatch.matching-strategy zu ant_path_matcher

  2. Ergänzen Sie die @Bean unter:


@Bean
public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(
                WebEndpointsSupplier webEndpointsSupplier, 
                ServletEndpointsSupplier servletEndpointsSupplier, 
                ControllerEndpointsSupplier controllerEndpointsSupplier, 
                EndpointMediaTypes endpointMediaTypes,
                CorsEndpointProperties corsProperties, 
                WebEndpointProperties webEndpointProperties, 
                Environment environment) {
    List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
    Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
    allEndpoints.addAll(webEndpoints);
    allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
    allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
    String basePath = webEndpointProperties.getBasePath();
    EndpointMapping endpointMapping = new EndpointMapping(basePath);
    boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(
                webEndpointProperties, environment, basePath);
    return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, 
                endpointMediaTypes, corsProperties.toCorsConfiguration(), 
                new EndpointLinksResolver(allEndpoints, basePath), 
                shouldRegisterLinksMapping, null);
}

private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, 
                                           Environment environment, String basePath) {
    return webEndpointProperties.getDiscovery().isEnabled() && 
                (StringUtils.hasText(basePath) || 
                ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
}

Bezug:

  • Vielen Dank! Dies scheint die beste Antwort zu sein, wenn Sie Spring nicht herabstufen möchten oder es zu viel Arbeit ist, zu Springdoc zu wechseln

    – Stefan K

    4. Februar um 17:27 Uhr

  • Die Anwendung funktioniert nach dem Hinzufügen, aber Swagger funktioniert nicht. Ich denke, ich werde zu springdoc wechseln

    – Rstar37

    8. Juni um 21:46 Uhr

  • Beste Antwort meiner Meinung nach! Vor allem, wenn die Anforderung darin besteht, Springboot nicht zu beeinträchtigen und Schwachstellen zu beheben.

    – VinjaNinja

    9. August um 8:47 Uhr

Benutzeravatar von ℛɑƒæĿᴿᴹᴿ
ℛɑƒæĿᴿᴹᴿ

Nur hinzufügen @EnableWebMvc in der Hauptklasse sollte das Problem lösen:

@EnableWebMvc
@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class);
    }
}

  • TBH Ich habe es gerade versucht und es hat nicht funktioniert. Deshalb habe ich runtergestimmt.

    – Giorgio Vespucci

    22. April um 14:56 Uhr

  • Vielen Dank, viele Kommentare zu Swagger oder Springs Version, die nicht gelöst wurden, sondern nur hinzugefügt wurden @EnableWebMvc hat bei mir funktioniert!

    – Renan Ribeiro

    30. Mai um 19:20 Uhr

  • Dies hat das Problem für mich behoben. Ich verwende die Spring-Boot-Version 2.7.0

    – Dinesh Arora

    27. Juli um 15:51 Uhr

  • Sei vorsichtig mit @EnableWebMvc

    – v.ladynev

    4. August um 22:29 Uhr

  • Das hat funktioniert. Aber ich habe Angst, was schief gehen kann, wenn diese Anmerkung in der Nähe ist: D

    – Xaxage

    12. August um 13:34 Uhr

Benutzeravatar von Eren
Eren

Keine Lösung, aber…

Ich habe herabgestuft spring-boot-starter-parent Fassung ab 2.6.0 zu 2.5.6 und es fing an zu arbeiten.

Benutzeravatar von Mauricio Toledo
Mauricio Toledo

Ich werde vervollständigen, was Anatoly über die Verwendung erwähnt hat springdoc-openapi.

Fügen Sie zuerst die hinzu springdoc-openapi Abhängigkeit von Ihrem Gradle build.gradle (oder Maven pom.xml):

// build.gradle
implementation "org.springdoc:springdoc-openapi-ui:1.6.4"

Hinzufügen OpenAPIDefinition Anmerkung zu Ihrer Hauptklasse:

@SpringBootApplication
@OpenAPIDefinition
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

Jetzt können Sie zu gehen {URI}/swagger-ui/index.html und es wird funktionieren, wenn die Swagger-Ansicht angezeigt wird.

  • Funktioniert Open API genauso wie Swagger? UI und alles andere? Müssen wir noch etwas ändern?

    – Naveen

    26. Februar um 19:10 Uhr

  • Ja, dasselbe wie Swagger.

    – Mauricio Toledo

    9. März um 18:45 Uhr

  • Danke für deine Antwort. klappt wunderbar. einfach und handlich

    – Lakshman

    3. September um 9:28

Benutzeravatar von ℛɑƒæĿᴿᴹᴿ
ℛɑƒæĿᴿᴹᴿ

Die beliebte Problemumgehung, die eine Definition von überschreibt WebMvcEndpointHandlerMapping funktionierte bei mir in einigen Umgebungen mit JDK 17, Boot+Actuator 2.6, Springfox 3 nicht.

Dies funktioniert jedoch überall dort, wo ich es brauche (lokale Entwicklung und CloudFoundry-Container):

@Bean
public WebMvcRequestHandlerProvider webMvcRequestHandlerProvider(
        Optional<ServletContext> context, 
        HandlerMethodResolver methodResolver, 
        List<RequestMappingInfoHandlerMapping> handlerMappings) {
    handlerMappings = handlerMappings.stream()
         .filter(rh -> rh.getClass().getName().contains("RequestMapping")).toList();
    return new WebMvcRequestHandlerProvider(context, methodResolver, handlerMappings);
}

Ich habe noch etwas dazu geschrieben im GitHub-Thread.

  • Funktioniert Open API genauso wie Swagger? UI und alles andere? Müssen wir noch etwas ändern?

    – Naveen

    26. Februar um 19:10 Uhr

  • Ja, dasselbe wie Swagger.

    – Mauricio Toledo

    9. März um 18:45 Uhr

  • Danke für deine Antwort. klappt wunderbar. einfach und handlich

    – Lakshman

    3. September um 9:28

Benutzeravatar von Procrastinator
Procrastinator

Fügen Sie dies einfach zu Ihrer Datei application.properties hinzu:spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER.

  • funktioniert nicht als Lösung … immer noch derselbe Fehler

    – Oleksandr Yefymov

    31. August um 18:21 Uhr

1424880cookie-checkSpring Boot 2.6.0 / Spring Fox 3 – Bean ‘documentationPluginsBootstrapper’ konnte nicht gestartet werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy