springdoc-openapi как отобразить массив строк в качестве ответа

В сети нет хороших примеров того, как получить следующий вывод с помощью библиотеки springdocs-openapi (1.5.7). Я хочу получить следующий результат:

      [
  "A", "B", "C"
]

Это код, основанный на предоставленных примерах.

      @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")}
                    )})

Это приводит к следующему выводу

      [
  "string"
]

Как вывод, указанный выше ["A", "B", "C"], возможен через библиотеку springdocs-openapi?

1 ответ

Вы неправильно используете. В value Атрибут (также атрибут по умолчанию, если вы ничего не указываете) принимает сериализованный объект JSON из примера полезной нагрузки.

Таким образом, чтобы получить ["A", "B"], вам не нужно несколько, вам нужна одна аннотация для одного примера.

Таким образом, обновление кода, как показано ниже, должно быть полезным.

      @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\"]")
            }
        )
    })
})

Ниже показан результат выполнения вышеуказанного кода.

Чтобы указать несколько примеров, должно быть несколько объектов-примеров, как показано ниже.

      @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\"]")
            }
        )
    })
})

ПРИМЕЧАНИЕ . 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"
            ]
          }
        }
      }
    }
  }
}

И результат такой, как показано ниже

Другие вопросы по тегам