2016-07-14 3 views
1

Все онлайн-учебники говорят, что вы должны поместить папку «dist» из пользовательского интерфейса Swagger под «WebContent», чтобы получить интерфейс Swagger.Setup Swagger UI на Джерси Grizzly

Но что, если у меня нет «WebContent» ?!

Приложение Jersey-Jaxrs-RESTful работает правильно на встроенном сервере Grizzly.

У меня есть Swagger правильно настроен, и когда я перехожу на localhost:9998/swagger.json Я вижу всю документацию API в формате JSON. Теперь все, что я хочу, это интерфейс Swagger для отображения этих данных JSON на хорошей HTML-странице.

Мой вопрос в том, как настроить этот интерфейс Swagger без папки WebContent и файла web.xml.

Вот моя конфигурация JS для index.html, чтобы начать интерфейс Swagger; url=http://localhost:9998/api/api-docs/swagger.json

Моя конфигурация Применение:

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

Был открытым вопрос об этой проблеме в https://github.com/swagger-api/swagger-core/issues/958; однако он не был разрешен.

ответ

0

У вас есть статические файлы интерфейса Swagger? Это будет выглядеть примерно так:

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/