Swagger-core: Beliebige Problemumgehung für die Einrichtung einer benutzerdefinierten Anwendungsklasse für Swagger mit einer Jersey ResourceConfig

Erstellt am 19. Jan. 2016  ·  3Kommentare  ·  Quelle: swagger-api/swagger-core

Ich befolge die Upgrade-Anleitung für 1.3.12 auf 1.5.6 zusammen mit der Jersey 2.X-Projekteinrichtungs-Anleitung . Ich habe ein Problem mit der Unterklasse 'Custom Application', die den folgenden Beispielcode bereitstellt:

public class SampleApplication extends Application {
    <strong i="7">@Override</strong>
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new HashSet();

        //resources.add(FirstResource.class);
        //resources.add(SecondResource.class);
        //...

        resources.add(io.swagger.jaxrs.listing.ApiListingResource.class);
        resources.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);

        return resources;
    }
}

Unser Projekt weicht von dem von Ihnen bereitgestellten Beispiel ab, da es eine Jersey ResourceConfig -Klasse erweitert und nicht direkt eine Application -Klasse. Das Problem ist, dass die Klasse ResourceConfig selbst die Methode getClasses() überschreibt und sie als endgültig deklariert.

Kennen Sie eine Möglichkeit, diese Einschränkung zu umgehen, entweder durch Hinzufügen der erforderlichen Ressourcen zu einem anderen Teil der Trikot-Anwendung oder durch andere Mittel, um Prahlerei zu überreden? Das Hinzufügen über die ResourceConfig.register() Hilfsmethode macht die swagger.json Datei unter dem üblichen Pfad verfügbar, füllt sie jedoch nicht mit der Dokumentation für die Endpunktklassen, die mit @Api annotiert wurden. registered() (und funktionierten vor dem Upgrade). Ich möchte nicht den Weg des web.xml-Servlets oder -Filters gehen.

Die generierte swagger.json enthält nur die zusätzlichen Dinge, die ich in der neuen BeanConfig definiert habe, wie folgt:

// http://localhost:8080/v1.0/swagger.json

{
  "swagger": "2.0",
  "info": {
    "description": "Description of my App.",
    "version": "1.0",
    "title": "MyApp"
  },
  "basePath": "/v1.0"
}

Danke für Ihre Hilfe.

Hilfreichster Kommentar

host und schema sind optional, ja.
Ohne setResroucePackage Sie eine leere Ausgabe, ja, genau wie Sie sehen können ;)

Alle 3 Kommentare

Solange Sie die Ressourcen hinzufügen, ist es in Ordnung. Die Verwendung von ResourceConfig.register() ist eine gute Lösung. Sie sehen es nicht ausgefüllt, weil Sie den letzten Schritt in der Anleitung nicht abgeschlossen haben - https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-2.X-Project -Setup-1.5#3 -Konfigurieren-und-Initialisieren-Swagger.

Der letzte Schritt, auf den Sie sich beziehen, ist das getClasses() , das ich erwähne? Oder die BeanConfig Bits? Für die BeanConfig ich folgendes:

    <strong i="9">@PostConstruct</strong>
    /**
     * Initializes Swagger Configuration
     */
    public void initializeSwaggerConfiguration() {
        final ReflectiveJaxrsScanner scanner = new ReflectiveJaxrsScanner();
        scanner.setResourcePackage("com.my.project.api");
        ScannerFactory.setScanner(scanner);
        BeanConfig config = new BeanConfig();
        config.setTitle("MyApp");
        config.setDescription("Description of my App");
        config.setVersion("1.0");
        config.setBasePath("/v1.0");
        config.setScan(true);
    }

Das einzige, was mir im Beispiel gefehlt hat, waren die setResourcePackage – das werde ich morgen versuchen. Die Host- und Schemabits sind eine Option, oder? Ich erinnere mich, das irgendwo gelesen zu haben...

host und schema sind optional, ja.
Ohne setResroucePackage Sie eine leere Ausgabe, ja, genau wie Sie sehen können ;)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen