2017-05-12 2 views
0

Ich habe eine REST-API und Springfox Swagger v2.6.1 enthalten und funktioniert. Aber jetzt möchte ich nicht immer alle Controller anzeigen, die ich habe, weil einige von ihnen sehr technisch sind und nicht für den durchschnittlichen Benutzer gedacht sind, aber ich möchte wählen können, was ich zeige, ohne den Code neu kompilieren zu müssen. Es gibt dieses Dropdown-Feld oben auf der Seite, das 'Standard (/ v2/api-docs)' (oder was auch immer Sie es konfiguriert haben) mit nur diesem einen Eintrag sagt. Meine Vermutung ist, dass es möglich sein sollte, mehrere Optionen dort zu haben, und entsprechend der Option zeigen bestimmte Controller-Klassen oder nicht.Filterung für API-Teile in Swagger

Da ich nicht wirklich weiß, wie man Bilder hochlädt, kann ich keine Screenshots bereitstellen. Ich hoffe, dass meine Frage trotzdem klar ist.

Der Code, der Prahlerei in meinem Projekt tut, ist die einfachste Möglichkeit:

@Bean 
public Docket api() { 

    return new Docket(DocumentationType.SWAGGER_2) 
      .select() 
       .apis(RequestHandlerSelectors.any()) 
       .paths(PathSelectors.any()) 
       .build() 
      .apiInfo(metadata()); 
} 

private ApiInfo metadata() { 
    return new ApiInfoBuilder() 
      .title("My awesome ACS API") 
      .description("All the requests that the server will respond to.") 
      .version("1.0.0") 
      .build(); 
} 

ich verschiedene Ansätze versucht, wie einige Eigenschaften hinzufügen, tun zwei .select() und für verschiedene Dinge Auswahl, aber ich don‘ Es scheint wirklich, als ob ich etwas erreicht habe, was ich zu erreichen hoffe.

Danke für jede Hilfe!

Antwort

1

Einige der Optionen kann ich mir vorstellen

  1. Sie Authentifizierung auf verschiedene Endpunkte SpringSecurity hinzufügen können, verwenden und die Endpunkte machen überhaupt nicht zugänglich (Aber wird in Swagger UI sichtbar sein).

  2. Die Drop-Down Sie auf der Oberseite sind zu erwähnen, kann so etwas wie diese

    @Bean 
    public Docket orderApi() { 
        // This will group the endpoints strting with /order. 
        // And it will be visible as a separate group in the drop down(In Swagger UI) 
        // with the name 'order' as specified in the groupName(..) 
        return new Docket(DocumentationType.SWAGGER_2) 
          .groupName("order") 
          .apiInfo(metadata()) 
          .select() 
          .paths(PathSelectors.ant("/order/**")) 
          .build(); 
    } 
    
    @Bean 
    public Docket orderValidationApi() { 
        return new Docket(DocumentationType.SWAGGER_2) 
          .groupName("product") 
          .apiInfo(metadata()) 
          .select() 
          .paths(PathSelectors.ant("/product/**")) 
          .build(); 
    } 
    
  3. Sie vollständig den Endpunkt konfiguriert werden, aus sichtbar in Swagger UI mit someting wie dies in Ihrer Docker Konfiguration

    ausschließen
    return new Docket(DocumentationType.SWAGGER_2) 
         .select() 
          .apis(RequestHandlerSelectors.any()) 
          .paths(PathSelectors.regex("(?!/error).+")).paths(PathSelectors.regex("(?!/product).+")) 
          .build() 
         .apiInfo(metadata()); 
    

    Dies wird alle Endpunkte, die nicht/Fehler und/Produkt zur Verfügung stehen. Sie können Endpunkte wie diese herausfiltern.

+0

Vielen Dank! Die zweite Antwort war genau das, wonach ich suchte - der .groupName ("") war der Schlüssel (da ich nichts an der Zugänglichkeit ändern wollte, nur für die Anzeige). Jetzt sehen die Titel im Dropdown nicht sehr schön aus, in meinem Fall: Advanced (/ acs/docs? Group = Advanced). Irgendwie kann ich das etwas benutzerfreundlicher machen? Ansonsten kann ich auch damit leben .. Vielen Dank !! – totee

+0

Die Antwort wurde mit dem Kommentar aktualisiert. – pvpkiran

+0

Akzeptieren Sie die Antwort, wenn es für Sie funktioniert – pvpkiran