Swagger 集成到 Dropwizard
Swagger integration into Dropwizard
我是 drop wizard (dropwizard.io) 的新手,刚刚完成了他们的教程。我想将 Swagger (swagger.io) 集成到这个示例应用程序中。
我发现:
- github.com/federecio/dropwizard-swagger-sample-app
- github.com/federecio/dropwizard-swagger
生成的JSON貌似很像,但是我无法展开REST资源查看各自的操作。
我注意到的唯一区别是 swagger 集成的示例代码使用 SERVER,而官方放置向导示例使用的是 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"
}]
}]
}]
}
我在生成的 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"
。如果没有看到方法的声明及其注释,我不能说是什么导致了它,但这就是您应该查看的内容。
现在有一个 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.
我是 drop wizard (dropwizard.io) 的新手,刚刚完成了他们的教程。我想将 Swagger (swagger.io) 集成到这个示例应用程序中。 我发现:
- github.com/federecio/dropwizard-swagger-sample-app
- github.com/federecio/dropwizard-swagger
生成的JSON貌似很像,但是我无法展开REST资源查看各自的操作。 我注意到的唯一区别是 swagger 集成的示例代码使用 SERVER,而官方放置向导示例使用的是 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"
}]
}]
}]
}
我在生成的 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"
。如果没有看到方法的声明及其注释,我不能说是什么导致了它,但这就是您应该查看的内容。
现在有一个 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.