Swagger UI与Camel的集成...无法访问端口

时间:2017-02-21 16:43:51

标签: apache spring-boot apache-camel swagger swagger-ui

我正在使用Camel集成Swagger。我下载了dist文件夹重命名为swagger并更新了index.html,但我无法通过我的应用程序端口访问它:http://localhost:$ {port} / $ {contextPath} /swagger/index.html

但如果我输入http://localhost:$ {port} / api-doc,我会得到swagger json转储。

如果转到该文件并使用浏览器手动打开它,我可以访问index.html。如何使用我的应用程序端口访问index.html?

http://localhost:$ {端口} / $ {的contextPath} /swagger/index.html

2 个答案:

答案 0 :(得分:3)

您需要公开一个会返回index.html文件的端点。尝试将以下内容添加到RouteBuilder中:

rest("/swagger")
  .produces("text/html")
  .get("/index.html")
  .responseMessage().code(200).message("Swagger UI").endResponseMessage()
  .to("direct://get/swagger/ui/path");

from("direct://get/swagger/ui/path")
  .routeId("SwaggerUI")
  .setBody().simple("resource:classpath:/swagger/index.html");

第一个路由定义了一个接受GET请求并返回text / html的restful端点 /swagger/index.html

第二个路由使用Camel的Simple组件将实际的 index.html 读入Exchange邮件正文。

因此,如果您转到 localhost:$ {port} / $ {contextPath} /swagger/index.html ,它应该正确加载 index.html 文件。

请注意,在 indext.html 中,您需要替换将返回API的JSON转储的URL,以便Swagger UI可以呈现它。

答案 1 :(得分:0)

我使用Camel Jetty作为REST组件。对于jetty,您只需添加一个额外的ResourceHandler来处理SwaggerUI资源。下面使用Spring xml语言配置REST:

<restConfiguration component="jetty" host="{{rest_hostname}}" port="{{rest_listen_port}}"
                       bindingMode="off" apiContextPath="api-docs" apiContextListing="true"
                       enableCORS="true">
        <!--ResourceHandler to handle Swagger UI contents on the jetty-->
        <endpointProperty key="handlers" value="swaggerUIHandler"/>
......
......
</restConfiguration>

我在webjars提供的jar中使用swaggerUI。配置处理程序bean:

<bean id="swaggerUIHandler" class="com.yifanwu.examples.camel.JettyResourceHandlerFactory" factory-method="buildResourceHandler">
        <!--your resource path is just "swagger" assuming it is on the classpath-->
        <constructor-arg name="resourcePath" value="META-INF/resources/webjars"/>
</bean>

Bean工厂:

public class JettyResourceHandlerFactory {
    public static ResourceHandler buildResourceHandler(String resourcePath) throws Exception {
        ResourceHandler rh = new ResourceHandler();
        rh.setResourceBase(JettyResourceHandlerFactory.class.getClassLoader()
                .getResource(resourcePath)
                .toURI().toString());
        return rh;
    }
}

完整示例:github