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 接口文档生成与查看

Springfox集成swagger实战篇

Springfox-boot-starter swagger 即时处理

SpringBoot中部署Swagger2和Swagger-UI