Swagger UI 未在 index.html 页面上显示任何内容

2024-04-21

已更新以下解决方案!
/////////////////////////////////////////////////////////// ///////////////////////
感谢下面 Ron 的建议,我稍微修改了我的设置以使用 BeanConfig 而不是 SwaggerConfig 并使其正常工作。为了做到这一点,我必须修改 servlet,并且(这就是我认为缺少的部分)将 BeanConfig 条目添加到 spring 应用程序上下文文件中,以便 spring 获取资源。我在代码中添加了下面的更新和注释,显示了旧的和新的/更新的代码。我可能可以继续使用 SwaggerConfig (也许我只是在 spring 应用程序上下文文件中丢失了某些内容?),但 BeanConfig 可以工作,所以我将保持原样。
/////////////////////////////////////////////////////////// ///////////////////////

我正在尝试让 Swagger 与我本地的基于 REST 的 Java 应用程序一起运行,并且已经取得了相当大的进展。然而,当我试图让 Swagger UI 工作时,我似乎错过了一些简单的事情。

每当我实际点击这个地址时:http://localhost:9082/mbl/index.html http://localhost:9082/mbl/index.html我在顶部看到了绿色的小标头,但下面是空白的白色主体,没有任何内容。我不应该在页面正文中看到更多内容吗?

我的堆栈是这样的:Java 6 / Wink / Spring 3.1 / Jackson 2.5 / JAX-RS (JSR-311),我使用以下 Swagger jar:swagger-annotations-1.3.10.jar / swagger-core_2.10- 1.3.10.jar/swagger-jaxrs_2.10-1.3.10.jar。

现在我已经成功地得到了一些 json 显示,当我点击时看起来像这样http://localhost:9082/mbl/services/api-docs http://localhost:9082/mbl/services/api-docs:

{"apiVersion":"1.0","swaggerVersion":"1.2","info":{"title":"Java API","description":"The following documentation contains the REST Service API useful for interacting with web services.","termsOfServiceUrl":"terms of service","contact":"[email protected] /cdn-cgi/l/email-protection","license":"license type","licenseUrl":"license url"}}

我可以看到这是从我的 SwaggerServlet.java 生成的,如下所示:

package com.somewhere.mblsvc.web;

import...

public class SwaggerServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    /* additional working code */
    BeanConfig beanConfig;

    public void setBeanConfig(BeanConfig beanConfig) {
        this.beanConfig = beanConfig;
    }
    /* end additional working code */    

    @Override
    public void init(ServletConfig servletConfig) {
        try {
        /* code from original post*/
        //  SwaggerConfig swaggerConfig = new SwaggerConfig();
        //  ConfigFactory.setConfig(swaggerConfig);
        //  swaggerConfig.setBasePath("/mbl/services");
        //  swaggerConfig.setApiVersion("1.0");
        //  swaggerConfig.setApiInfo(new ApiInfo("Java API", "The following //documentation contains the REST Service API useful for interacting with web //services.", "terms of service", "[email protected] /cdn-cgi/l/email-protection", "license type", "license //url"));
        //  ScannerFactory.setScanner(new DefaultJaxrsScanner());
        //  ClassReaders.setReader(new DefaultJaxrsApiReader());
        /* end code from original post*/

        /* updated working code */
        beanConfig.setBasePath("/mbl/x-services");
        beanConfig.setVersion("1.0");
        beanConfig.setResourcePackage("com.somewhere.mblsvc.resources");
        beanConfig.setScan(true);
        /* end updated working code */

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

另外,我的 spring 应用程序上下文 xml 文件中有以下内容:

<bean class="org.apache.wink.spring.Registrar">
    <property name="classes">
        <set value-type="java.lang.Class">
        </set>
    </property>
    <property name="instances">
        <set>
            <ref local="jaxbProvider" />
            <ref local="apiDeclarationProvider" />
            <ref local="apiListingResourceJson" />
            <ref local="resourceListingProvider" />
        </set>
    </property>

<!-- Jackson Providers -->
<bean id="jaxbProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider" >
    <property name="mapper" ref="jacksonObjectMapper"/>
</bean>

<bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" >
    <property name="annotationIntrospector" ref="jacksonAnnotationIntrospector" />
</bean>

<bean id="jacksonAnnotationIntrospector" class="com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair" >
    <constructor-arg ref="primaryAnnotationIntrospector" />
    <constructor-arg ref="secondaryAnnotationIntrospector" />
</bean>

<bean id="primaryAnnotationIntrospector" class="com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector" />
<bean id="secondaryAnnotationIntrospector" class="com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector" />

<!-- Swagger Configuration and Providers -->

<!-- additional working code -->
<bean id="beanConfig" class="com.wordnik.swagger.jaxrs.config.BeanConfig">
    <property name="title" value="Java API"/>
    <property name="version" value="1.0" />
    <property name="basePath" value="/mbl/services"/>
    <property name="resourcePackage" value="com.somewhere.mblsvc.resources"/>
    <property name="scan" value="true"/>
</bean>
<!-- end additional working code -->

<bean id="apiDeclarationProvider" class="com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider" />
<bean id="apiListingResourceJson" class="com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON" />
<bean id="resourceListingProvider" class="com.wordnik.swagger.jaxrs.listing.ResourceListingProvider" />

我的 web.xml 如下所示:

<!-- REST servlet that dispatches to the App (resource class). Remove Init params entry containing application file -->
<servlet>
    <servlet-name>Wink Servlet</servlet-name>
    <servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Wink Servlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

<!-- Enabling Swagger servlet -->
<servlet>
    <servlet-name>Swagger Servlet</servlet-name>
    <servlet-class>com.somewhere.mblsvc.web.SwaggerServlet</servlet-class>
    <load-on-startup>-1</load-on-startup> 
</servlet>
<servlet-mapping>
    <servlet-name>Swagger Servlet</servlet-name>
    <url-pattern>/api-docs</url-pattern>
</servlet-mapping>

这是我的资源类的片段:

@Path("test")
@Api(value ="test", description="Test Services")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public class TestResource {

.
.
.

    @GET
    @Path("testInfo")
    @ApiParam(defaultValue="you would put test case input here for a post")  
    @ApiOperation(value="Composite service returning extensive test information", response=com.somewhere.mblsvc.messages.test.testinfo.pojo.UserResponseMessage.class)
    @ApiResponses(value={
            @ApiResponse(code=200, message="OK"),
            @ApiResponse(code=500, message="Internal Error")
    })
    @JsonSerialize(include=JsonSerialize.Inclusion.ALWAYS)
    public Response getTestInfo(@Context HttpHeaders headers, 
            @CookieParam(value = "testBrand") String testBrand) {
.
.
.

最后,我的 index.html 中唯一重要的部分(据我所知)如下所示:

  <script type="text/javascript">
    $(function () {
      var url = window.location.search.match(/url=([^&]+)/);
      if (url && url.length > 1) {
        url = url[1];
      } else {
        url = "http://" + window.location.hostname + (window.location.port ? ':'+ window.location.port: '') + "/mbl/services/api-docs";
      }
      .
      .
      .

I will gladly根据需要提供更多信息。有谁知道我可能会错过什么?

多谢!


核心问题是你的资源没有被真正扫描。您现在确实得到的是基本的 Swagger 响应,但如果您查看内容,就会发现其中没有 API 定义。

结果,swagger-ui 无法显示任何内容,因为没有任何内容可显示。

虽然我很好奇您是如何获得上述配置的,但事实是集成可以更简单。我们没有 Wink 的具体文档(我们应该有),但这个想法与任何 JAX-RS 集成都非常相似。

我建议执行以下步骤:

  1. 迁移到 swagger-core 1.5。显然这是一个新的集成,没有理由不使用它。
  2. 查看眨眼样本 https://github.com/swagger-api/swagger-samples/tree/develop_2.0/java/java-jaxrs-wink- 应该really易于遵循。
  3. 阅读guides https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-JAX-RS-Project-Setup-1.5.X对于 1.5 - 它们不适合眨眼,但它们都很相似,您可以推断眨眼。
  4. 检查迁移指南 https://github.com/swagger-api/swagger-core/wiki/1.3--1.5-Migration因为它还包含可能对您有帮助的详细信息。

我意识到这并不能完全解决当前的问题,但我宁愿在这种情况下推广正确的整体解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swagger UI 未在 index.html 页面上显示任何内容 的相关文章

随机推荐

  • 将 CVPixelBuffer 渲染到 NSView (macOS)

    我有一个CVPixelBuffer我正在尝试在屏幕上有效地绘制 转变为低效率的方式NSImage可以工作 但速度非常慢 丢掉了大约 40 的帧数 因此 我尝试使用将其渲染在屏幕上CIContext s drawImage inRect fr
  • 使用 SharedSizeGroup 测量/排列网格

    两个包含以某种方式指定的元素的网格和 SharedSizeGroup 似乎存在一些问题 这个问题是为了回答先前的问题 https stackoverflow com questions 3865033 grid height not adj
  • Visual Studio 调试器在混合调试模式下停止命中断点

    我在 MSVC2013 中混合调试时遇到严重问题 从本机 C DLL 调用 COM 方法后 调试器不再在断点处停止 代码结构 上图展示了代码的整体结构 我有一个解决方案 其中包含大约 10 个 C 项目 大约 50 个 C 本机项目和一个
  • Android Studio、OpenCV、C++、jni、NDK - 无法配置?

    我正在尝试使用 jni 和 Android Studio NDK 在 Android Studio 中进行 OpenCV C 调用 这些是我一直在工作的参考资料 https github com opencv opencv tree mas
  • Kubernetes 应用服务但端点没有

    当我尝试将服务应用于 pod 时 端点始终为 none 有人可以知道任何根本原因吗 我还检查选择器是否与deployment yaml 中定义的内容匹配 下面是我使用的部署 服务文件 我还附上了服务描述 部署 yaml apiVersion
  • 如何避免在 git-add 时指定绝对文件路径

    Using git add一旦文件路径变得很长 命令就会变得乏味 例如git add src test com abc product server datasource manager aats DSManger java是否可以绕过指定
  • 将参数从 .aspx.cs 传递到 .ashx

    我想将字符串传递到 ashx 页面 通常我会通过在 aspx 页面中设置参数来完成此操作 例如 Loader TreeLoader ashx passedVariable hello 但我想在 aspx cs 端以编程方式执行此操作 因为该
  • 引导程序中导航和巨型屏幕之间的差距

    对于我的一生 我无法确定我的导航和大屏幕之间的空白来自哪里 我已经玩过很多变量 但无法让它消失 我在这里做了一个cssdeckhttp cssdeck com labs u6ws0ozl http cssdeck com labs u6ws
  • 用于屏幕文本的 OCR(光学字符识别)

    我正在尝试创建一个软件 通过捕获屏幕截图来自动化 PC 然后使用 OCR 光学字符识别 来查找要单击的特定按钮 例如 我已经有了鼠标和键盘控制部分 但现在 我需要 OCR 来处理屏幕截图 我发现 Tesseract OCR 似乎不能很好地处
  • 为什么 Django 中的 Google-Auth(Google Identity) 弹出窗口空白?

    我的 Google 身份验证卡在弹出身份验证流程中 一键式身份验证工作正常 但按钮不行 div div 我点击它 弹出窗口打开 但它仍然空白 没有任何进展
  • SDWebImage 在 swift 中崩溃

    看来如果我在已完成的块中使用 self 它就会崩溃 self imageView sd setImageWithURL MYIMAGEURL placeholderImage nil options SDWebImageOptions Re
  • 如何让主键从1000开始?

    create table tablename id integer unsigned not null AUTO INCREMENT primary key id 我需要主键从1000开始 我正在使用MySQL 如果您的表已经创建为自动增量
  • 左特征向量在 scipy 中没有给出正确的(马尔可夫)平稳概率

    给定以下马尔可夫矩阵 import numpy scipy linalg A numpy array 0 9 0 1 0 15 0 85 平稳概率存在且等于 6 4 通过取矩阵的大幂可以很容易地验证这一点 B A copy for in x
  • Z3:检查模型是否唯一

    Z3 有没有办法证明 表明给定模型是唯一的并且不存在其他解决方案 一个小例子来演示 declare const a1 Int declare const a2 Int declare const a3 Int declare const b
  • asp.net mvc 镜像路径和虚拟目录

    我知道这必须是重复的 但我一直在翻阅大量有关此的信息 但无法使其发挥作用 我正在尝试让一个网站在客户端的服务器上运行 并且他们将该网站安装在虚拟目录中 我本地没有这个设置 所以我在这里盲目飞行 我正在尝试建立一条通往图像的路径 用于 Fac
  • 我应该如何处理Java中非常大的数组?

    我有一个算法 当前分配一个非常大的双精度数组 它经常更新和搜索 数组的大小为 N 2 2 其中 N 是算法运行的行数 我还必须保留整个内容的副本 以用于与算法周围的应用程序相关的目的 当然 这对我的算法可以处理的行数施加了限制 因为我需要应
  • 用于单个测试的 Rails/RSpec 切换缓存

    因此 在我的应用程序中 我可以禁用所有测试的缓存 这将是理想的 但显然有许多遗留测试依赖于缓存的功能 有没有办法为单个 RSpec 测试启用 Rails 缓存 就像是 before each do cache setting Rails c
  • 如何让 Jenkins 在 Maven 2 构建上 --fail-fast?

    我正在尝试使用 Jenkins 构建一个多模块 Maven 项目 当我在命令行使用相同的环境 variables settings xml user 正如 Jenkins 所做的那样 测试失败会导致构建立即失败 Failed tests t
  • 如何从 SQL Server 表中恢复已删除的行?

    我不小心对 WHERE 错误的表运行了 DELETE 命令 条款 我正在使用 SQL Server 2005 有没有办法可以帮助我恢复丢失的数据 可以使用 Apex 恢复工具 我已成功恢复我不小心删除的表行 如果您下载试用版 它将仅恢复第
  • Swagger UI 未在 index.html 页面上显示任何内容

    已更新以下解决方案 感谢下面 Ron 的建议 我稍微修改了我的设置以使用 BeanConfig 而不是 SwaggerConfig 并使其正常工作 为了做到这一点 我必须修改 servlet 并且 这就是我认为缺少的部分 将 BeanCon