Swagger и Springfox Меняют пример ответа для разных кодов состояния

#java #spring-boot #springfox

Вопрос:

У меня есть конкретный DTO, который я использую для возврата в качестве примера для документации Swagger. Как я могу изменить пример, если у меня есть успешный код 201?

Примеры ответов в swagger:

Примеры ответов в swagger

Я использую аннотации «@ApiModelProperty» для описания своих объектов, но не нахожу способа изменить пример для разных кодов ответов. В моем коде я не хочу показывать список ошибок, так как это необязательное свойство, и оно будет доступно только тогда, когда будут созданы коды, отличные от 201.

Идеи?

Ответ №1:

Вы можете сделать это с помощью нескольких аннотаций следующим образом:

 @Operation(summary = "Your summary")
@ApiResponses(value = { 
  @ApiResponse(responseCode = "200", description = "Your description", 
    content = { @Content(mediaType = "application/json", 
      schema = @Schema(implementation = YourModel.class),
      examples = [ExampleObject(value = "{"timestamp": 1581552186590, "status": 404, "error": "Not Found", "message": "Error message", "requestId": "62bcf95d"}")]) })})
 

Комментарии:

1. Спасибо вам за ваш ответ. Вот как это делается, хотя проблема в том, что я не могу установить разные значения в качестве примеров для своего класса. Например, в 200 сценариях мой список ошибок должен быть пустым и не отображаться там. Я не хочу создавать еще одного DTO только для того, чтобы показать пример для Свэггера.

2. Извините, я вас не понимаю. Если у вас нет таких DTO, как вы реагируете на другой контент?

3. Дело в том, что это становится массовым, если нам нужно создать другой DTO для каждого отдельного ответа. Например, я хочу, чтобы мой потребитель API знал, что при сбое API он выдаст список ошибок с подробными сведениями. Хотя DTO тот же, но список «ошибки» является необязательным параметром, что означает, что он будет заполнен только тогда, когда будут устранены 50-кратные ошибки. Поэтому я просто хочу дать своему потребителю другой пример моего DTO, один с заполненными ошибками, а другой без них (в случае кодов состояния 20x). Мой вопрос в том, есть ли у нас способ разоблачить это с помощью одного DTO.

4.В этом случае вы можете добавить пример в виде строки JSON с @ApiResponse examples атрибутом следующим образом: examples = [ExampleObject(value = "{"timestamp": 1581552186590, "status": 404, "error": "Not Found", "message": "Error message", "requestId": "62bcf95d"}")] . Я добавил это в свой ответ для удобства чтения.

5. Спасибо, это действительно решило проблему!