【问题标题】:Swagger and Springfox Changing the example response for different status codesSwagger 和 Springfox 更改不同状态代码的示例响应
【发布时间】:2021-09-24 19:20:53
【问题描述】:

我有一个特定的 DTO 用于返回作为 Swagger 文档的示例。如果我有成功的 201 代码,如何更改示例?

大摇大摆的示例响应:

我使用注释“@ApiModelProperty”来描述我的对象,但找不到如何更改不同响应代码的示例。在我的代码中,我不想显示 Errors 列表,因为它是一个可选属性,并且仅在生成非 201 代码时才可用。

想法?

【问题讨论】:

    标签: java spring-boot springfox


    【解决方案1】:

    您可以使用以下几个注释来做到这一点:

    import io.swagger.v3.oas.annotations.media.ExampleObject;
    
    @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\"}")]) })})
    

    【讨论】:

    • 感谢您的回复。这就是这样做的方式,但问题是我无法为我的班级设置不同的值作为示例。例如,在 200 个场景中,我的错误列表应该是空的,并且不会显示在那里。我不想再创建另一个 DTO 来举例说明 Swagger。
    • 对不起,我没有关注你。如果您没有这样的 DTO,您如何使用不同的内容做出响应?
    • 关键是 - 如果我们需要为每个不同的响应创建不同的 DTO,它会变得非常庞大。例如,我希望我的 API 使用者知道,当 API 失败时,它会抛出一个显示详细信息的错误列表。虽然 DTO 是相同的,但“错误”列表是一个可选参数,这意味着它只会在 50x 错误消失时填充。所以我只想给我的消费者一个我的 DTO 的不同示例,一个填满错误,另一个没有填满错误(如果是 20x 状态代码)。我的问题是,我们是否有办法公开只有一个 DTO。
    • 在这种情况下,您可以将示例添加为带有 @ApiResponse examples 属性的 JSON 字符串,如下所示:examples = [ExampleObject(value = "{\"timestamp\": 1581552186590, \"status\": 404, \"error\": \"Not Found\", \"message\": \"Error message\", \"requestId\": \"62bcf95d\"}")]。为了便于阅读,我已将其添加到我的答案中。
    • 谢谢,这实际上解决了问题!
    猜你喜欢
    • 2019-05-06
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多