为springdoc/io.swagger.core.v3“apiresponse”指定响应类型

k4ymrczo  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(804)

我有一个@restcontroller端点定义为

@GetMapping(value = "/end/point/{id}")
    public ResponseEntity<Boolean> endpoint(
            @PathVariable("id") @NotBlank @Pattern(regexp ="^[A-Za-z]$") String cdsId){
...
conditions to return boolean
...
    }

我希望openapi3文档如下所示。具体来说,我不想要“内容”部分,而是希望能够定义如下响应类型:

"200": {
    "description": "OK",
    "type": "boolean"
}

但是,使用springdoc/io.swagger.core.v3 apiresponses/apiresponse时,请如下所示:

@ApiResponses(value = {
            @ApiResponse(),
            @ApiResponse(responseCode = "200", description = "OK" )})

生产

"200": {
   "description":"OK",
    "content": {
        "*/*": {
            "schema": {
                "type": "boolean"
            }
        }
    }
}

我不希望“内容”部分在所有,因为安全扫描说,我们正在运行它不正确的标签。同时,我希望通过编程来实现这一点,这样我就不必每次从应用程序检索api文档时都手动更改它。apiresponse类型不提供“type”字段,并自动生成“content”。我能在apiresponse类中处理这个问题吗?

8fq7wneg

8fq7wneg1#

什么是openapi的响应对象?

如openapi规范中所述,响应对象可以具有以下属性 description -关于返回的响应的一些描述。 headers -指定作为响应的一部分返回的任何其他标头。一个例子是set cookie头,可以根据需要随意设置。请注意 Content-Type 不是响应头,但被视为rfc-7231第3节中定义的实体头。 content -作为响应的一部分返回的实际响应对象(普通字符串也是对象)。 links -作战联系图。例如,在搜索操作中实现分页时,指向下一页/上一页/第一页/最后一页的链接。

更详细地了解内容属性

这家酒店有一张Map String (表示响应代码)和mediatype对象(表示响应主体)。

200:
  description: successful operation
  content:
    application/xml:
      schema:
        type: array
        items:
          $ref: '#/components/schemas/Pet'
    application/json:
      schema:
        type: array
        items:
          $ref: '#/components/schemas/Pet'
400:
  description: Bad Request
  content: {}

在上面的例子中 200 以及 400 表示响应代码。当我们看到 content 对于 200 响应,它告诉响应可以是xml格式,也可以是 Content-Type 请求的标头。对于 400 ,一个空内容( {} )意味着不会返回响应主体。
在每个内容类型下 schema 描述将为给定响应代码返回的对象。对于 200 它告诉我们将返回一个数组,该数组将由以下类型的项组成 Pet .
现在,回答你的问题。
您不能像在下面的示例中所说的那样定义响应

"200": {
    "description": "OK",
    "type": "boolean"
}

这是严格违反规范的,当您在swagger编辑器中尝试此操作时,它将指示由于无效模式而导致的错误。
等级库编辑器中显示的错误如下所示。

swagger ui中的错误如下所示

相关问题