2016-07-14 9 views
1

Alle Tutorials online sagen, dass Sie "Dist" Ordner von Swagger UI unter "WebContent" platzieren, um die Swagger UI arbeiten zu erhalten.Setup Swagger UI auf Jersey Grizzly

Aber was ist, wenn ich nicht "WebContent" habe ?!

Meine Jersey-Jaxrs-RESTful-Anwendung wird auf dem integrierten Grizzly-Server ordnungsgemäß ausgeführt.

Ich habe Swagger richtig eingerichtet und wenn ich zu localhost:9998/swagger.json gehe, kann ich alle API-Dokumentation im JSON-Format sehen. Jetzt will ich nur noch die Swagger-Benutzeroberfläche, um diese JSON-Daten in einer schönen HTML-Seite anzuzeigen.

Meine Frage ist, wie kann ich diese Swagger UI ohne WebContent-Ordner und web.xml-Datei einrichten.

Hier ist meine index.html JS Konfiguration Swagger UI zu starten; die url=http://localhost:9998/api/api-docs/swagger.json

Meine Anwendungskonfiguration:

@ApplicationPath("api") 
public class ResConfig extends Application { 
public ResConfig() { 
    super(); 
    BeanConfig beanConfig = new BeanConfig(); 
    beanConfig.setVersion("1.0.2"); 
    beanConfig.setSchemes(new String[] { "http" }); 
    beanConfig.setHost("localhost:9998"); 
    beanConfig.setBasePath("/api"); 
    beanConfig.setResourcePackage("test.resources"); 
    beanConfig.setScan(true); 
} 


@Override 
public Set<Class<?>> getClasses() { 
    Set<Class<?>> resources = new HashSet<Class<?>>(); 
    resources.add(Res.class); 

    resources.add(CrossDomainFilter.class); 

    resources.add(io.swagger.jersey.listing.ApiListingResourceJSON.class); 
    resources.add(io.swagger.jaxrs.listing.ApiListingResource.class); 
    resources.add(io.swagger.jaxrs.listing.SwaggerSerializers.class); 
    return resources; 
} 
} 


public class CrossDomainFilter implements ContainerResponseFilter { 
    public CrossDomainFilter() { 
    } 

    @Override 
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { 
     responseContext.getHeaders().add("Access-Control-Allow-Origin", "*"); 
     responseContext.getHeaders().add("Access-Control-Allow-Headers", ""); 
     responseContext.getHeaders().add("Access-Control-Allow-Credentials", ""); 
     responseContext.getHeaders().add("Access-Control-Allow-Methods", ""); 
     responseContext.getHeaders().add("Access-Control-Max-Age", ""); 
    } 
} 

Es eine offene Frage zu diesem Problem bei https://github.com/swagger-api/swagger-core/issues/958 war; Es wurde jedoch nicht gelöst.

Antwort

0

Hosten Sie die statischen Swagger UI-Dateien? Das wäre in etwa so aussehen:

ClassLoader loader = Main.class.getClassLoader(); 
CLStaticHttpHandler docsHandler = new CLStaticHttpHandler(loader, "swagger/"); 
docsHandler.setFileCacheEnabled(false); 

ServerConfiguration cfg = server.getServerConfiguration() 
cfg.addHttpHandler(docsHandler, "/docs/"); 

Wo der Inhalt des Ordners swagger alle Prahlerei UI Material enthalten.

Grizzly hat derzeit einen Fehler bei der Verarbeitung von Pfaden zu statischen Ressourcen. Wenn Sie also die Dokumente aufrufen, müssen Sie sicherstellen, dass Sie am Ende den abschließenden Schrägstrich haben. So könnte es zum Beispiel localhost:9998/docs/

sein
Verwandte Themen