【问题标题】:Swagger integration into DropwizardSwagger 集成到 Dropwizard
【发布时间】:2015-03-16 12:44:55
【问题描述】:

我对放置向导 (dropwizard.io) 还很陌生,并且刚刚完成了他们的教程。我想将 Swagger (swagger.io) 集成到这个示例应用程序中。 我发现:

  • github.com/federecio/dropwizard-swagger-sample-app
  • github.com/federecio/dropwizard-swagger

生成的 JSON 似乎非常相似,但是我无法展开 REST 资源来查看它们各自的操作。 我注意到的唯一区别是,swagger 集成的示例代码使用了 SERVER,而官方的 drop 向导示例使用的是 APPLICATION

这是一张图片 (i.stack.imgur.com/QzhPa.png)

请你告诉我我的方法有什么问题。 非常感谢。这是我的方法的代码:https://github.com/geoHeil/dropwizardSwaggerIntegrationNotWorking

编辑:

for api - docs {
  "apiVersion": "0.0",
  "swaggerVersion": "1.2",
  "apis": [{
    "path": "/sample"
  }, {
    "path": "/hello-world",
    "description": "Operations about greetings"
  }]
}


for sample {
  "apiVersion": "0.0",
  "swaggerVersion": "1.2",
  "basePath": "http://geoHeil.local:8080",
  "resourcePath": "/sample",
  "apis": [{
    "path": "/sample",
    "operations": [{
      "method": "GET",
      "summary": "Sample endpoint",
      "notes": "",
      "type": "void",
      "nickname": "get",
      "authorizations": {},
      "parameters": []
    }]
  }, {
    "path": "/sample/hello-with-path-param/{name}",
    "operations": [{
      "method": "GET",
      "summary": "Sample endpoint with path param",
      "notes": "",
      "type": "void",
      "nickname": "getWithPathParam",
      "authorizations": {},
      "parameters": [{
        "name": "name",
        "required": true,
        "type": "string",
        "paramType": "path"
      }]
    }]
  }, {
    "path": "/sample/hello-with-query-param",
    "operations": [{
      "method": "GET",
      "summary": "Sample endpoint with query param",
      "notes": "",
      "type": "void",
      "nickname": "getWithQueryParam",
      "authorizations": {},
      "parameters": [{
        "name": "name",
        "required": false,
        "type": "string",
        "paramType": "query"
      }]
    }]
  }]
}

for hello - world {
  "apiVersion": "0.0",
  "swaggerVersion": "1.2",
  "basePath": "http://geoHeil.local:8080",
  "resourcePath": "/hello-world",
  "apis": [{
    "path": "/hello-world",
    "operations": [{
      "method": "GET",
      "summary": "Greetings endpoint",
      "notes": "",
      "type": "void",
      "nickname": "sayHello",
      "authorizations": {},
      "parameters": [{
        "name": "name",
        "required": false,
        "items": {
          "type": "string"
        },
        "paramType": "query"
      }]
    }]
  }]
}

【问题讨论】:

  • 您使用哪个版本的 swagger-ui?你可以查看swagger-ui.js文件的顶部。
  • 我使用的是:io.federeciodropwizard-swagger0.5.2 a图片可以找到dropbox.com/s/bsvfpvahp3ari3r/Swagger_UI.png?dl=0js文件顶部找不到版本信息。
  • 但是在 JS 控制台中出现了一些错误,例如 UncaughtType 错误
  • 我没有准备好 dropwizard 环境。您是否有机会编辑问题并通过 /api-docs 和 /api-docs/sample 的输出?
  • 确定:api-docs: {"apiVersion":"0.0","swaggerVersion":"1.2","apis":[{"path":"/sample"},{"path ":"/hello-world","description":"关于问候的操作"}]}

标签: api rest swagger dropwizard swagger-ui


【解决方案1】:

现在有一个 Swagger 规范 2.0 示例可用:

https://github.com/swagger-api/swagger-samples/tree/master/java/java-dropwizard

这使用了具有最小依赖关系的最新 swagger 核心库。注意,Jackson 的版本需要从 dropwizard 的 2.3.2 更新到 swagger 的 2.4.2。

【讨论】:

    【解决方案2】:

    我在生成的 JSON 中没有看到任何明显会导致操作无法扩展的内容。

    但是,与 dropwizard-swagger 包捆绑在一起的 swagger-ui 有点旧。我会尝试使用更新版本的 swagger-ui。

    我不确定它是否会与捆绑的 swagger-ui 冲突,但基本上你需要克隆 https://github.com/swagger-api/swagger-ui 并将 /dist 目录复制到你的静态内容中。

    另一种选择是在本地运行 swagger-ui(仅用于测试目的),但打开 /dist/index.html 并将其指向 /api-docs 目录。但是,为了使其正常工作,您需要启用 CORS - https://github.com/swagger-api/swagger-ui#cors-support

    编辑:

    我没有注意到您使用 JSON 编辑了问题,这样更易​​于阅读。 GET /hello-world 操作有问题。看起来它应该接受一个字符串数组作为查询参数,但该参数在其定义中缺少"type": "array"。如果没有看到方法的声明及其注释,我无法说出可能导致它的原因,但这就是您应该查看的内容。

    【讨论】: