springdoc-openapi 如何显示字符串数组作为响应

Ste*_*nPG 4 spring-boot springdoc springdoc-ui springdoc-openui springdoc-openapi-ui

网络上没有关于如何使用 springdocs-openapi 库 (1.5.7) 获取以下输出的好示例。我希望获得以下输出:

[
  "A", "B", "C"
]
Run Code Online (Sandbox Code Playgroud)

这是基于所提供示例的代码。

@Operation(summary = "")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "OK",
                    content = {@Content(mediaType = "application/json",
                            array = @ArraySchema(schema = @Schema(implementation = String.class)),
                            examples = {@ExampleObject("A"), @ExampleObject("B"), @ExampleObject("C")}
                    )})
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出

[
  "string"
]
Run Code Online (Sandbox Code Playgroud)

上面列出的输出 ["A","B","C"] 如何通过 springdocs-openapi 库实现?

Deb*_*Roy 6

您使用的方法@ExampleObject不正确。该value属性(如果您未指定任何内容,也是默认属性)采用示例负载的 JSON 序列化对象。

因此,要获取["A", "B"],您不需要多个@ExampleObject,而是需要一个示例的一个注释。

因此更新如下所示的代码应该会有所帮助

@Operation(summary = "Some method")
@ApiResponses(value = {
    @ApiResponse(responseCode = "200", description = "OK", content = {
        @Content(
            mediaType = MediaType.APPLICATION_JSON_VALUE,
            array = @ArraySchema(schema = @Schema(implementation = String.class)),
            examples = {
                @ExampleObject("[\"A\", \"B\"]")
            }
        )
    })
})
Run Code Online (Sandbox Code Playgroud)

下图是上面代码的输出

要指定多个示例,应该有多个示例对象,如下所示

@Operation(summary = "Some method")
@ApiResponses(value = {
    @ApiResponse(responseCode = "200", description = "OK", content = {
        @Content(
            mediaType = MediaType.APPLICATION_JSON_VALUE,
            array = @ArraySchema(schema = @Schema(implementation = String.class)),
            examples = {
                @ExampleObject(name = "Example 1", summary = "Summary 1", description = "Some desc", value = "[\"A\", \"B\"]"),
                @ExampleObject(name = "Example 2", summary = "Summary 2", description = "Some desc", value = "[\"C\", \"D\"]")
            }
        )
    })
})
Run Code Online (Sandbox Code Playgroud)

注意name的属性@ExampleObject用于在规范文件内部标识示例。

"responses": {
  "200": {
    "description": "OK",
    "content": {
      "application/json": {
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "examples": {
          "Example 1": {
            "summary": "Summary 1",
            "description": "Some desc",
            "value": [
              "A",
              "B"
            ]
          },
          "Example 2": {
            "summary": "Summary 2",
            "description": "Some desc",
            "value": [
              "C",
              "D"
            ]
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

输出如下所示 在此输入图像描述