2016-07-14 6 views
1

모든 온라인 자습서에서는 Swagger UI의 "dist"폴더를 "WebContent"아래에 두어 Swagger UI를 작동시켜야한다고 말합니다.Jersey Grizzly에서 Swagger UI 설정

"WebContent"가 없으면 어떻게 될까요?!

My Jersey-Jaxrs-RESTful 응용 프로그램이 내장 된 Grizzly 서버에서 올바르게 실행됩니다.

Swagger를 올바르게 설정했으며 localhost:9998/swagger.json으로 갈 때 JSON 형식의 모든 API 문서를 볼 수 있습니다. 자, 내가 원하는 건 Swagger UI로이 JSON 데이터를 멋진 HTML 페이지에 표시하는 것입니다.

내 질문은 WebContent 폴더 및 web.xml 파일없이이 Swagger UI를 설정하는 방법입니다.

여기 Swagger UI를 시작하는 나의 index.html 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

정적 스 거거 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/

일 수 있습니다.
관련 문제