Springfox/Swagger 中用于返回 ObjectNode 的自定义 ResponseModel
Posted
技术标签:
【中文标题】Springfox/Swagger 中用于返回 ObjectNode 的自定义 ResponseModel【英文标题】:Custom ResponseModel in Springfox/Swagger for returning of ObjectNode 【发布时间】:2016-05-01 20:39:30 【问题描述】:我想使用 Swagger 为我的 Spring Boot API 提供 API 文档。我设法让 Springfox 2.3.0 工作,一切都按预期工作,除了控制器返回一个 ObjectNode。 Swagger 尝试将返回的类(ObjectNode)转换为 JSON-Representation,结果如下:
"array": true,
"bigDecimal": true,
"bigInteger": true,
"binary": true,
"boolean": true,
"containerNode": true,
"double": true,
"float": true,
"floatingPointNumber": true,
"int": true,
"integralNumber": true,
"long": true,
"missingNode": true,
"nodeType": "ARRAY",
"null": true,
"number": true,
"object": true,
"pojo": true,
"short": true,
"textual": true,
"valueNode": true
现在我知道,Swagger 无法猜测我构建的 JSON 中包含哪些值,但我想以任何形式手动添加正确的 ResponseModel。
控制器看起来像这样:
@ApiOperation(value = "NAME", notes = "NOTES")
@RequestMapping(value = "", method = RequestMethod.GET, produces="application/json")
public ResponseEntity<ObjectNode> getComponentByIdentification(
@ApiParam(name="customerid", required=true, value="")
@RequestParam (required = true)
String customerId)
return new ResponseEntity<ObjectNode>(someService.getCustomer(customerId), HttpStatus.OK);
有什么方法可以向 Swagger 提供自定义 ResponseJSON,在文档中显示为模型架构?
【问题讨论】:
你的意思是像this这样的东西吗? 【参考方案1】:我们可以使用 swagger springfox 注解在 swagger api 文档中给出自定义请求和响应模型,如下所示
@PostMapping
@ApiOperation(value = "Create Article", response = ArticleDTO.class)
@ApiImplicitParams(
@ApiImplicitParam(name = "Article DTO", value = "article", required = true, dataType = "com.example.ArticleDTO", paramType = "body"))
public Article create(@ApiIgnore Article article)
return articleRepository.save(article);
这里的请求和响应是 ArticleDTO,但 Jackson 会将其转换为 Article,但文档将显示 ArticleDTO.java 中的内容
这就是你要找的东西
【讨论】:
以上是关于Springfox/Swagger 中用于返回 ObjectNode 的自定义 ResponseModel的主要内容,如果未能解决你的问题,请参考以下文章
SpringFox Swagger - 模型中的可选和必填字段
Springfox swagger 2 不适用于 Spring Boot 1.5:在 /v2/api-docs 中找不到 HTTP 404
SpringFox swagger2 and SpringFox swagger2 UI 接口文档生成与查看