#java #spring-boot #springfox
Вопрос:
У меня есть конкретный DTO, который я использую для возврата в качестве примера для документации Swagger. Как я могу изменить пример, если у меня есть успешный код 201?
Примеры ответов в 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. Спасибо, это действительно решило проблему!