2016-07-14 8 views
1

オンラインのすべてのチュートリアルでは、Swagger UIの「dist」フォルダを「WebContent」の下に置き、Swagger UIを機能させるべきだと言っています。Jersey GrizzlyでSwagger UIを設定する

"WebContent"がないとどうなりますか?

My Jersey-Jaxrs-RESTfulアプリケーションは、組み込みのGrizzlyサーバーで正しく動作します。

Swaggerを正しくセットアップしました。localhost:9998/swagger.jsonにアクセスすると、すべてのAPIドキュメントがJSON形式で表示されます。さて、私が欲しいのは、このJSONデータを素敵なHTMLページに表示するSwagger UIです。

私の質問は、WebContentフォルダとweb.xmlファイルなしでこのSwagger UIを設定する方法です。

ここに私のindex.htmlスワッガーUIを開始するJS設定です。 url=http://localhost:9998/api/api-docs/swagger.json

マイアプリケーション構成:https://github.com/swagger-api/swagger-core/issues/958でこの問題に関する未解決の問題がありました

@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", ""); 
    } 
} 

。しかし、それは解決されませんでした。

答えて

0

静的なSwagger UIファイルをホストしていますか?

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

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

フォルダswaggerの内容は、すべて闊歩のUIのものが含まれています:それは次のようになります。

現在、Grizzlyは静的リソースへのパスを処理する方法にバグがあります。そのため、ドキュメントにアクセスするときに末尾にスラッシュが付いていることを確認する必要があります。したがって、たとえば、それはlocalhost:9998/docs/

関連する問題