Einführung in die Prahlerei
Prahlerei ist in der Tat eine gute Sache. Es kann automatisch API -Schnittstellendokumente basierend auf der Geschäftsordnung generieren, insbesondere für Projekte im erholsamen Stil. Entwickler müssen die Restap -API kaum speziell beibehalten. Dieses Framework kann automatisch APIs im RESTFUT-Stil für Ihre Geschäftsordnung generieren und bietet auch eine entsprechende Testoberfläche, mit der die Antwort im JSON-Format automatisch angezeigt wird. Es erleichtert die Kommunikations- und Koordinationskosten zwischen Backend-Entwicklern und Front-End stark.
Einführung in Springfox-Swagger
Mit den leistungsstarken Funktionen von Prahlerei hielt der Big Spring -Framework der Java Open Source schnell auf dem Laufenden. Es nutzte seine eigenen Vorteile voll und ganz, integrierte Prahlerei in ein eigenes Projekt und integrierte einen Spring-Schwestern, der sich später zu Springfox entwickelte. Springfox selbst verwendet nur seine eigenen AOP -Eigenschaften und integriert Prahlerei in den Stecker. Seine eigene Generation von Geschäfts -APIs stützt sich immer noch auf die Prahlerei, um dies zu erreichen.
Es gibt relativ wenige Informationen zu diesem Rahmen, und die meisten von ihnen sind einfache Einstiegsnutzung. Ich habe viele Fallstricke begegnet, um dieses Framework in mein Projekt zu integrieren. Um diese Fallstricke zu lösen, musste ich seinen Quellcode ausgraben, um zu sehen, was es war. Dieser Artikel beschreibt mein Verständnis von Springfox und die Aufmerksamkeit während der Verwendung von Springfox.
Das allgemeine Prinzip von Springfox
Das allgemeine Prinzip von Springfox ist, dass im Prozess des Projektstarts während des Initialisierungsprozesses des Spring-Kontextes das Framework einige SWAger-bezogene Bohnen automatisch in den aktuellen Kontext entsprechend der Konfiguration lädt und automatisch die Klassen scannt, die möglicherweise API-Dokumente im System generieren und entsprechende Informationscache generieren. Wenn die MVC -Steuerungsschicht des Projekts SpringMVC verwendet, scannt automatisch alle Controller -Klassen, um entsprechende API -Dokumente gemäß den Methoden in diesen Controller -Klassen zu generieren.
Da mein Projekt SpringMVC ist, verwendet dieser Artikel Srping MVC -Integration Springfox als Beispiel, um die Verwendung und Prinzipien von Springfox zu diskutieren.
Schritte zur Integration von SpringMVC in Springfox
Zunächst muss das Projekt die folgenden drei Abhängigkeiten hinzufügen:
<!-Sring MVC-Abhängigkeit-> <Depopentcy> <gruppe> org.springFramework </Groupid> <artifactId> Spring-Webmvc </artifactId> <version> 4.2.8.Release </Version> </abhängig> <!-Swagger2 Core Dependenty-> <entellung> </gruppen> io.spingfox <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <!-- swagger-ui provides API display and testing interface for projects --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency>
Die oben genannten drei Abhängigkeiten sind die grundlegendsten Abhängigkeiten für die Projektintegration SpringMVC und Springfox, und andere Abhängigkeiten werden hier weggelassen. Die erste ist die grundlegende Abhängigkeit von SpringMVC, die zweite ist die Abhängigkeit von der Prahlerei und die dritte ist die abhängige Abhängigkeit im Zusammenhang mit der Schnittstelle. Dies ist nicht notwendig. Wenn Sie die mit Springfox gelieferte API -Schnittstelle nicht verwenden möchten, können Sie dies auch nicht verwenden und eine Reihe von Schnittstellen schreiben, die zu Ihrem Projekt passen. Nach dem Hinzufügen dieser Abhängigkeiten fügt das System automatisch einige JAR -Pakete in Bezug auf Springfox und Prahlerei hinzu. Ich warf einen kurzen Blick zu und stellte fest, dass es hauptsächlich Folgendes gibt:
Springfox-Swagger2-2.6.1.Jar
Swagger-Annotations-1.5.10.jar
Swagger-Modelle-1.5.10.jar
Springfox-SPI-2.6.1.Jar
Springfox-Core-2.6.1.Jar
Springfox-Schema-2.6.1.Jar
Springfox-Swagger-Common-2.6.1.Jar
Springfox-Spring-Web-2.6.1.Jar
Guava-17.0.jar
Spring-Plugin-Core-1.2.0.Release.jar
Spring-Plug-Metadata-1.2.0.Release.jar
Spring-Swagger-UI-2.6.1.Jar
Jackson-Databind-2.2.3.jar
Jackson-Annotation-2.2.3.jar
Das obige sind die Gläser, die ich visuell denke, Springfox braucht möglicherweise nicht alle Gläser, die Springfox benötigt. Aus dem obigen Glas können wir sehen, dass Pringfox zusätzlich zu der Stütze auf Prahlerei auch Guava, Spring-Plug, Jackson und andere Abhängigkeiten benötigt (beachten Sie, dass Jackson ein notwendiges JAR-Paket für die Generierung von JSON ist. Wenn diese Abhängigkeit nicht dem Projekt selbst hinzugefügt wird, um Swagger zu integrieren, muss diese Abhängigkeit hinzugefügt werden).
Einfache Verwendung von Springfox
Wenn Sie nur die Standardkonfiguration von Springfox verwenden, ist die Integration in SpringMVC sehr einfach. Schreiben Sie einfach eine Klasse ähnlich dem folgenden Code und geben Sie ihn in Ihr Projekt ein. Der Code ist wie folgt:
@Configuration@enableWebmvc@enableWagger2PublicClass apiconfig {}Beachten Sie, dass oben eine leere Java -Klassendatei, der Klassenname nach Belieben angegeben werden kann, aber die drei Anmerkungen mit @Configuration, @EnableWebmvc und @encswagger2 in der obigen Klasse müssen hinzugefügt werden. Dadurch wird die grundlegende Integration von SpringMVC und Springfox abgeschlossen. Mit drei Annotationen können Sie nach Beginn des Projekts eine ähnliche Adresse wie folgt verwenden, um die API-Liste anzuzeigen: http://127.0.0.1:8080/jaddemo/swagger-ui.html
Dies ist in der Tat ein sehr magischer Effekt. Mit drei einfachen Anmerkungen zeigt das System automatisch alle APIs aller Controller -Klassen im Projekt an. Beginnen wir nun mit dieser Konfigurationsklasse und analysieren Sie einfach ihre Prinzipien. Es gibt keinen Code in dieser Klasse, und es ist offensichtlich, dass die drei Anmerkungen eine entscheidende Rolle spielen. Unter ihnen ist die @Configuration -Annotation bereits im Spring -Framework erhältlich. Es handelt sich um eine Annotation, die durch die @Component -Meta -Annotation identifiziert wird. Daher wird mit dieser Annotation die Klasse die Klasse automatisch in eine Bohne instanziiert und sie in den Frühlingskontext registriert. Die zweite Annotation @EnableWebmvc bedeutet daher, dass SrpingMVC aktiviert ist. Klicken Sie in Eclipse auf diese Annotation, um einen kurzen Look zu erhalten. Es geht darum, eine Bean von Delegatingwebmvcconfiguration durch die Meta -Annotation @import (DelegatingWebmvcconfiguration.Class) in den Frühlingskontext zu stopfen. Ich denke, der Zweck dieser Klasse sollte darin bestehen, Swagger mit einer SpringMVC -Konfiguration zu versorgen. Die dritte Annotation: @enableWagger2. Sie können sich den Namen vorstellen. Es wird verwendet, um Swagger zu integrieren. 2. durch die Meta -Annotation: @import ({Swagger2DocumentationConfiguration.class}), es wurde eine Konfiguration des Swagger2DocumentationConfiguration -Typs eingeführt, und dies ist die Kernkonfiguration von Swagger. Der Code im Inneren ist wie folgt:
@Configuration@import ({SpringfoxWebmvcconfiguration.class, SwaggerCommonConfiguration.class})@componentscan (Basepackages = {"springfox.documentation.swagger2.Readers.parameter", "Springfox.Document.wagger2.web2.web", ",", " "Springfox.Documentation.swagger2.Mappers"}) publicClassSwagger2DocumentationConfiguration {@Bean public JacksonModuleregistrar Swagger2Module () {returnNewswagger2JacksonModule (); }}Dieser Klassenkopf verwendet einige Annotationen und führt dann die Klassen der SpringFoxWebmvcConfiguration und die SwaggerCommonConconfiguration-Klasse ein und scannt automatisch Springfox. Hier interessiert mich die Springfoxwebmvcconfiguration -Klasse. Ich denke, diese Klasse sollte die Kernkonfiguration von Springfox integriertem MVC sein. Klicken Sie in und sehen Sie den folgenden Code:
@Configuration@import ({modelsconfiguration.class})@componentscan (Basepackages = { "Springfox.Documentation.spring.Web.Scanners", "Springfox.Documentation.spring.Web.Readers.operation", "Springfox.Documentation.spring.Web.Readers.operation", ", Operation", ",", ", Operation", ",", ",", ", Operation", ", "springfox.documentation.spring.parameter", "springfox.documentation.spring.web.plugins", "springfox.documentation.spring.web.paths"})@enablePluginRegistries ({{{{{{{{{{{{{{{{{{{{{{ DocumentationPlugin.class, ApiListingBuilderPlugin.class, OperationBuilderPlugin.class, ParameterBuilderPlugin.class, ExpandedParameterBuilderPlugin.class, ResourceGroupingStrategy.class, OperationModelsProviderPlugin.class, DefaultsProviderPlugin.class, PathDecorator.class}) publicClassspringfoxWebmvcconfiguration {}Der folgende Code in dieser Klasse ist nichts anderes, als neue Bohnen durch die @Bean -Annotation hinzuzufügen. Ich interessiere mich nicht sehr daran. Was mich am meisten interessiert, sind die Dinge, die durch @enablePluginregistries dem Kopf hinzugefügt werden. Springfox basiert auf dem Feder-Plug-Mechanismus, um die Prahlerei zu integrieren. Wie wird die Frühlingsplug implementiert? Ich habe noch keine Zeit, das Prinzip der Frühlingsklammer zu untersuchen. Im Folgenden werde ich jedoch erwähnen, dass ich ein Plugin schreibe, um die Funktionalität von Prahlerei zu erweitern. Der obere Stecker über @enablePluginRegistries ist noch nicht verfügbar. Die Codes, die ich gesehen habe, umfassen hauptsächlich apilistingbuilderplugin.class, OperationBuilderPlugin.Class, ParameterbuilderPlugin.Class, ExpandedParameterbuilderPlugin.ClASS, EXPANDEDPARAMeterBuilderPlugin.Class, Class, Class, Class, Class, CLASS,
Der erste apilistingbuilderplugin, der zwei Implementierungsklassen hat, nämlich apilistischer Reader und SwaggerapilistingingReader. Unter ihnen generiert der apilistingReader automatisch eine API -Liste gemäß dem Controller -Typ, und der SwaggerapilistingReader erzeugt eine API -Liste gemäß der von der @API -Annotation identifizierten Klasse. Das OperationBuilderPlugin -Plugin wird verwendet, um bestimmte API -Dokumente zu generieren. Diese Art von Plugin verfügt über viele Implementierungsklassen. Sie teilen jeweils ihre Arbeit und tun ihre eigenen Dinge. Ich habe mir die Details nicht sorgfältig angesehen, sondern habe mich nur auf eine der Implementierungsklassen konzentriert: OperationParameterader. Diese Klasse ist ein Plugin, das zum Lesen von API -Parametern verwendet wird. Es stützt sich auf der ModelAttributeParameterexpander-Werkzeugklasse, mit der die Befehlsobjekte des Nicht-einfachen Typs in den Grenzflächenmethodenparametern im Controller automatisch analysiert werden können, um eine Parameterliste zu erhalten, die alle Attribute enthält (hier eine Grube, die eine Infinit-Recursion verursachen kann, die unten eingeführt wird). Das ExpandedParameterBuilderPlugin-Plug-In wird hauptsächlich verwendet, um einige Funktionen von Schnittstellenparametern zu erweitern, z. Wenn das System startet, werden sie eingestellt, einige werden verwendet, um die Schnittstellenliste zu scannen. Einige werden zum Lesen von Schnittstellenparametern usw. verwendet. Ihr gemeinsamer Zweck ist es, alle API -Schnittstellen im System zu scannen und sie für Benutzer zu untersuchen. Wie sind diese Reihe von Tischstopfen eingestellt und wo sind ihre Ausführungseingänge?
Wir setzen unseren Aufmerksamkeitspunkt für die Annotationsinhalte des Komponenten im Code -Header der SpringfoxWebmvcConfiguration -Klasse oben auf. In dieser Annotation wird ein Paket namens Springfox.Documentation.spring.web.plugins gescannt. Dieses Paket finden Sie in Springfox-Spring-Web-2.6.1.Jar. Unter diesem Paket haben wir festgestellt, dass es zwei sehr Kernklassen gibt, nämlich DokumentationspluginsManager und DokumentationPlugins: Für den ersten DokumentationspluginsManager ist es eine Bean, die keine Schnittstelle implementiert, aber viele Eigenschaften des PluginRegistry -Typs verfügt, und alle werden über die @autowired Annotation in den Eigenschaftswert injiziert. Wenn man seinen Klassennamen kombiniert, ist es leicht zu glauben, dass dies ein Manager ist, der alle Stecker verwaltet. Aufgrund der Konfiguration der Komponentenannotation ist es leicht zu verstehen, dass alle Plug -Instanzen durch Frühjahr in eine Bohne instanziiert und dann in diese DokumentationspluginsManager -Instanz injiziert und gleichmäßig verwaltet werden. Eine weitere wichtige Klasse in diesem PaketdokumentationspluginSbootStrapper. Wenn Sie die Einzelheiten betrachten und sich ansehen, werden Sie feststellen, dass es sich tatsächlich um eine von @Component identifizierte Komponente handelt, und seine Konstruktionsmethode injiziert die gerade beschriebene DokumentationspluginsManager -Instanz, und das wichtigste ist, dass sie auch die SmartLifecycle -Schnittstelle implementiert. Jeder, der den Lebenszyklus von Frühlingsbohnen kennt, weiß, dass, wenn diese Komponente in eine Bohne instanziiert wird und im Srping -Kontext verwaltet wird, seine Start () -Methode automatisch aufgerufen wird. Wenn Sie auf start () klicken, um sich den Code anzusehen, werden Sie feststellen, dass eine Linie von Codeskandokumentation (BuildContext (jeweils)) enthält. Dies wird zum Scannen von API -Dokumenten verwendet. Durch die weitere Verfolgung des Codes dieser Methode können Sie feststellen, dass diese Methode letztendlich ihre DokumentationPluginsManager -Eigenschaft verwendet, um alle Stecker zusammen anzupassen, um das gesamte System zu scannen und API -Dokumente zu generieren. Die Scan -Ergebnisse werden in einer Karteneigenschaft der Dokumentationscache -Klasse zwischengespeichert.
Das obige ist das allgemeine Prinzip der Integration von Springfox. Es wird hauptsächlich eine Reihe von Beans in den Srping -Kontext über die EngagementWagger2 -Annotation injiziert und die Controller -Klasse des Systems automatisch startet, erzeugt entsprechende API -Informationen und zwischengespeichert sie. Darüber hinaus wird einige Controller -Klassen injiziert, die von @Controller Annotation als Eintrag für das UI -Modul zum Zugriff auf die API -Liste identifiziert wurden. Zum Beispiel die Swagger2Controller-Klasse im Springfox-Swagger2-2.6.1.Jar-Paket. Dieser Controller ist die Schnittstellenadresse, die im UI -Modul verwendet wird, um auf die API -Liste zuzugreifen. Wenn Sie die Adresse besuchen http://127.0.0.1:8080/jaddemo/swagger-ui.html, um die API-Liste anzuzeigen http://127.0.0.1:8080/jaddemo/v2/api-docs?group=sysgroup und Anzeige auf der Schnittstelle. Der Controller -Eintrag, der dem Hintergrund dieser Adresse entspricht, ist die oben genannte Swagger2Controller -Klasse. Nach Erhalt der Anfrage holt diese Klasse die API -Informationen direkt aus dem Cache ab, der im Voraus initialisiert wurde, um eine JSON -String -Rückgabe zu generieren.
Nachdem wir die Prinzipien von Springfox verstanden haben, werfen wir einen Blick darauf, welche Fallstricke ich während der Verwendung von Springfox begegnet bin.
Die erste große Grube von Springfox: Die von der Konfigurationsklasse generierte Bean muss den gleichen Kontext wie Spring MVC teilen.
Wie oben beschrieben, muss im SpringMVC -Projekt Springfox integriert werden, um eine einfache Konfigurationsklasse wie folgt zu schreiben, ohne dass eine Geschäftsordnung in das Projekt ist.
@Configuration@enableWebmvc@enableWagger2PublicClass apiconfig {}Aufgrund der @Configuration -Annotation wird sie automatisch in eine Bohne instanziiert und in den Kontext injiziert. Ein Fallstrick ist jedoch zu beachten, dass der Kontext, in dem diese Bohne wie Frühlings -MVC im gleichen Kontext sein muss. Wie versteht man? Da es in den tatsächlichen Spring -MVC -Projekten in der Regel zwei Kontexte gibt, folgt der einen Kontext und das andere ist Spring MVC (es ist ein Subkontext, der den Kontext folgt). Der Kontext ist der org.springframework.web.context.request.RequestContextListener -Listener in Bezug auf Spring in der Datei web.xml. Der geladene Kontext wird normalerweise als Konfigurationsdatei namens Spring-Contet.xml geschrieben. Die Bohnen hier werden schließlich in den Kontext initialisiert. Es umfasst hauptsächlich Service, DAO und andere Bohnen im System sowie Datenquellen, Dinge usw. Ein weiterer Kontext ist Spring MVC, der über die org.springframework.Web.Servlet.DispatcherServlet im Zusammenhang mit Spring MVC in Web.xml geladen wird. Es verfügt normalerweise über eine Konfigurationsdatei namens Spring-MVC.xml. Beim Schreiben der Apiconfig-Klasse müssen wir sicherstellen, dass der Pfad dieser Klasse im Basis-Package-Bereich der Komponenten-Scan-Konfiguration in SpringMVC liegt, wenn wir sie mit der @Configuration-Annotation laden. Denn wenn Apiconfig durch Frühling geladen wird, wird eine Reihe von Bohnen injiziert. In diesen Bohnen müssen einige Bohnen in SpringMVC automatisch alle Controller -Klassen auf einige Bohnen verlassen. Wenn das Projekt den Kontext von SrpingMVC vom Kontext als Unterkontext des Kontextes trennt. Wenn Sie versehentlich von diesem Apiconfig -Typ Bean mit dem vorherigen Text geladen werden, da im Spring MVC -Kontext im Stammkontext keine Konfigurationsklassen vorhanden sind.
Tatsächlich stimme ich nicht der Konfiguration der Swagger durch die Annotation von @Configuration zu, da ich denke, dass die API -Funktionalität von Swagger für Produktionsprojekte optional ist. Unsere Prahlerei wird häufig verwendet, um Umgebungen für die Projektentwicklung des Projekts Front-End-Team oder für andere Systeme zu testen, um Schnittstellen zu integrieren. Sobald das System online ist, ist es wahrscheinlich, dass diese API -Listen im Produktionssystem versteckt sind. Wenn die Konfiguration jedoch im Java -Code über die Annotation von @Configuration geschrieben ist, ist dies, wenn Sie diese Funktion beim Online -Gehen entfernen möchten, peinlich und Sie müssen den Java -Code so ändern, dass sie neu kompiliert werden. Basierend darauf empfehle ich eine Methode, um die herkömmlichste XML -Datei nach Spring zu konfigurieren. Die spezifische Methode besteht darin, die Annotation von @Configuration zu entfernen, und dann schreibt sie eine Bean -Konfiguration ähnlich wie <bean/> in die Spring XML -Konfigurationsdatei. In einem Projekt, in dem der Stammkontext vom MVC-Kontext getrennt ist, ist er direkt in Spring-MVC.xml konfiguriert, was sicherstellt, dass es sich im selben Kontext wie der SpringMVC-Kontext befinden muss.
Die zweitgrößte Grube von Springfox: Die Parameter der Controller -Klasse achten darauf, die unendliche Rekursion zu verhindern.
Spring MVC verfügt über einen leistungsstarken Parameterbindungsmechanismus, der die Anforderungsparameter automatisch in ein benutzerdefiniertes Befehlsobjekt binden kann. Um faul zu sein, verwenden viele Entwickler beim Schreiben eines Controllers direkt ein Entitätsobjekt als Parameter der Controller -Methode. Zum Beispiel der folgende Beispielcode:
@RequestMapping (value = "update") Public String Update (Menuvomenuvo, Modellmodell) {}Dies ist der Code, den die meisten Programmierer gerne in Controller schreiben, um eine Entität zu ändern. Bei der Integration in Prahlerei gibt es hier eine große Grube. Wenn alle Eigenschaften im Menuvo Grundtypen sind, ist es in Ordnung, nichts geht schief. Wenn es in dieser Klasse jedoch einige andere benutzerdefinierte Attribute gibt und dieses Attribut direkt oder indirekt Attribute seines eigenen Typs existiert, dann wird es Probleme geben. Zum Beispiel: Wenn die Menuvo -Klasse eine Menüklasse ist, enthält sie auch eine Eigenschaft Eltern des Menuvo -Typs, die das übergeordnete Menü darstellt. Auf diese Weise meldet das Prahlermodul direkt einen Fehler, wenn das System startet, da es die API nicht laden kann. Der Grund für den Fehler ist, dass beim Laden dieser Methode die Parameter der Aktualisierungsmethode analysiert werden. Wenn der Parametermenuvo kein einfacher Typ ist, werden alle Klassenattribute automatisch rekursiv interpretiert. Dies erleichtert es leicht, in eine tote Schleife mit unendlicher Rekursion zu fallen.
Um dieses Problem zu lösen, habe ich gerade eine OperationParameterader-Plug-in-Implementierungsklasse und die modelAttributeparameterexpander-Toolklasse geschrieben, von der es abhängt. Es ersetzt die ursprünglichen zwei Klassen von Srpingfox durch Konfiguration, ersetzt die Logik der Parsen der Parameteranalyse wie eine Spalte und vermeidet unendlich eine Rekursion. Dies entspricht natürlich einer Möglichkeit, die Quellcodeebene zu ändern. Ich habe noch keine perfektere Lösung für dieses Problem gefunden, daher kann ich nur empfehlen, dass Sie versuchen, diese unendliche Rekursion bei der Verwendung von Springfox-Prahlerei zu vermeiden. Dies entspricht schließlich nicht den Spezifikationen von SpringMVC -Befehlsobjekten. Die Befehlsobjekte mit SpringMVC -Parameter sind vorzugsweise nur einfache Grundtypattribute.
Springfox 'dritte Hauptgrube: API -Gruppierung verwandte Docket -Instanzen können nicht latent geladen werden
Springfox wird standardmäßig alle APIs in eine Gruppe teilen. Wenn Sie über eine Adresse zugreifen, die wie http://127.0.0.1:8080/jaddemo/swagger-ui.html ähnelt, werden alle API-Listen auf derselben Seite geladen. Wenn das System etwas größer ist und die API etwas mehr ist, wird die Seite zu Tode gefälscht, sodass es sehr notwendig ist, die API zu gruppieren. Die API -Gruppierung wird durch die @Bean -Annotation in der APICONF -Konfigurationsdatei definiert. Häufige Konfigurationen im Internet sind wie folgt:
@EnableWebmvc@enableWagger2PublicClass apiconfig {@Bean public docket CustomDocket () {return Newdocket (documentationType.swagger_2) .APIInfo (apiinfo ()); }}Im obigen Code wird ein Docket über @Bean injiziert. Diese Konfiguration ist nicht erforderlich. Wenn diese Konfiguration nicht verfügbar ist, generiert das Framework eine Standard -Docket -Instanz für sich. Der Zweck dieser Docket -Instanz besteht darin, die öffentlichen Informationen aller APIs anzugeben, die sie verwalten können, z. B. grundlegende Informationen wie API -Version, Autor usw., und um anzugeben, welche APIs nur aufgeführt sind (gefiltert von API -Adressen oder Annotationen).
Es kann mehrere Docket -Instanzen geben, z. B. den folgenden Code:
@EnableWebmvc@enableWagger2PublicClass apiconfig {@Bean public docket CustomDocket1 () {return Newdocket (documentationType.swagger_2) .Groupname ("Apigroup1"). Apiinfo (apiInfo (). Select (). } @Bean public docket CustomDocket2 () {return Newdocket (documentationType.swagger_2) .GroupName ("apigroup2"). Apiinfo (apiinfo ()). Select (). }}Wenn im Projekt mehrere Docket -Instanzen konfiguriert sind, kann die API gruppiert werden, beispielsweise unterteilt der obige Code die API in zwei Gruppen. In diesem Fall muss jeder Gruppe im obigen Code einen anderen Namen wie "Apigroup1" und "Apigroup2" zugewiesen werden. Jede Gruppe kann mit Pfaden angeben, um welche Gruppe die APIs durch ANT-Adressausdruck zu verwalten. In der obigen Konfiguration sind beispielsweise die erste Gruppe von Verwaltungsadressen APIs mit dem Beginn von /sys /. Die zweite Gruppe von Management -APIs mit dem Beginn /Shop /. Natürlich gibt es viele andere Filtermethoden, wie z. B. Klassenanmerkungen, Methodenanmerkungen, regelmäßige Ausdrücke usw. Nach der Gruppierung können Sie in der Dropdown-Option in der oberen rechten Ecke der API-List-Schnittstelle verschiedene API-Gruppen auswählen. Dadurch wird die API -Liste des Projekts auf verschiedene Seiten verteilt. Dies wird das Management erleichtern, ohne vorgeben, tot zu sein, da die Seite zu viele APIs laden muss.
Wie bei der Verwendung von @Configuration stimme ich jedoch nicht zu, dass @Bean für die Konfiguration von Docket -Instanzen für Gruppen -APIs konfiguriert wird. Aus diesem Grund wird der Code auch zu Tode geschrieben. Ich empfehle daher, eine eigene Docket -Instanz in der XML -Datei zu konfigurieren, um diese ähnlichen Funktionen zu implementieren. In Anbetracht der vielen Attribute im Docket ist es natürlich schwieriger, Bohnen direkt zu konfigurieren. Sie können selbst eine Fabrikbekleidung für das Docket selbst schreiben und anschließend FactoryBean in der XML -Datei konfigurieren. Bei der Konfiguration von Docket in XML. Sie werden auf eine weitere große Grube stoßen, dh die Lademethode der Feder auf Bohnen ist standardmäßig faul geladen. Nach der direkten Konfiguration dieser Docket -Instanzbohnen in XML. Sie werden feststellen, dass es keinen Effekt gibt und in der Dropdown-Liste in der oberen linken Ecke der Seite kein Gruppierungselement vorhanden ist.
Dieses Problem hat mich mehrere Stunden lang beunruhigt. Später wurde spekuliert, dass die Federbohne standardmäßig faul geladen ist und diese Docket -Instanz nicht in den Federkontext geladen wurde. Wie sich herausstellt, ist meine Vermutung korrekt. Ich weiß nicht, ob dies ein Fehler in Springfox ist oder ob ich die Docket -Konfiguration nicht vom ursprünglichen Java -Code in die XML -Konfigurationsdatei hätte verschieben sollen.
Andere Fallstricke in Springfox: Es gibt einige andere Fallstricke in Springfox. Zum Beispiel werden in der @APIOperation -Annotation das HTTPMethod -Attribut nicht als bestimmte Methode oder Post -Methode angegeben, alle Methoden wie GET, Post, Löschen, Put werden in der API -Liste aufgeführt, sodass die API -Liste zu stark dupliziert wird, was sehr hässlich ist. Darüber hinaus habe ich während des Tests auf Anmeldeberechtigungsprobleme usw. gestoßen. Diese Haufen kleiner Gruben, die aufgrund des begrenzten Raums leichter zu lösen sind, werde ich nicht viel sagen. Es gibt auch die Verwendung von Anmerkungen wie @API, @APIOperation und @APIPARAM. Ich werde nicht viele Dokumente auf dieser Online -Dokumente wiederholen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.