如何在@ApiResponse中添加一个带有Swagger的示例?

w8f9ii69  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(185)

我想在我的方法中添加一个与斯瓦格的例子,我已经尝试了一些事情,但他们没有工作。
我有自己的接口,在其中定义方法:

@Api(value = "test API")
@RequestMapping("/api/v1/product")
public interface TestController {

    @ApiOperation(
            value = "Service that return a Product",
            notes = "This service returns a Product by the ID",
            nickname = "getProductById",
            response = ProductResponse.class)
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "The request has succeeded.", response = ProductResponse.class),
            @ApiResponse(code = 500, message = "Internal server error.", response = ProductResponse.class) })
    @GetMapping(
            value = "/productById",
            produces = { "application/json" }
    )
    ResponseEntity<ProductResponse> getProductById(@RequestParam(value = "productId", required = true) String productId);

ProductResponse类如下所示:

@Getter
@Setter
@AllArgsConstructor
public class ProductResponse {

    private Product product;
    private CustomException customException;

}

Product类如下所示:

@Getter
@Setter
@AllArgsConstructor
public class Product {

    @JsonProperty("id")
    private String id;

    @JsonProperty("productName")
    private String productName;

    @JsonProperty("productDescription")
    private String productDescription;

    @JsonProperty("unitPrice")
    private Double unitPrice;

CustomException类如下所示:

@Getter
public class CustomException {

    private final String message;
    private final String errorCode;
    private final String errorType;
    private final Exception exceptionDetail;

    public CustomException(String message, String errorCode, String errorType, Exception exceptionDetail) {
        this.message = message;
        this.errorCode = errorCode;
        this.errorType = errorType;
        this.exceptionDetail = exceptionDetail;
    }

当响应为200时,响应如下所示:

{
  "product": {
    "id": "12345",
    "productName": "Product name",
    "productDescription": "This is a description",
    "unitPrice": 3.25
  },
  "customException": null
}

但当响应为500时,响应如下所示:

{
  "product": "null,",
  "customException": {
    "message": "/ by zero",
    "errorCode": "500",
    "errorType": "Internal server error",
    "exceptionDetail": null,
    "cause": null,
    "stackTrace": [
      {
        "classLoaderName": "app",
        "moduleName": null,
        "moduleVersion": null,
        "methodName": "getProductById",
        "fileName": "TestControllerImpl.java",
        "lineNumber": 33,
        "className": "com.myproject.testmicroservice.controller.impl.TestControllerImpl",
        "nativeMethod": false
      }
    ]
  }
}

如何在@ApiResponse注解中添加自定义示例?

5n0oy7gb

5n0oy7gb1#

您可能遗漏了@Operation注解,而您在其中放置了@ApiResponse
示例:

import io.swagger.v3.oas.annotations.responses.ApiResponse;
  import io.swagger.v3.oas.annotations.Operation;

  @Operation(responses = {
      @ApiResponse(responseCode = "200", content = @Content(examples = {
          @ExampleObject(name = "getUserAttribute",
                         summary = "Retrieves a User's attributes.",
                         description = "Retrieves a User's attributes.",
                         value = "[{\"value\": [\"area1\", \"area2\", \"area3\"], \"key\":\"GENERAL_AREAS\"}, {\"value\":\"933933933\", \"key\":\"FONyE\"}]")
      }, mediaType = MediaType.APPLICATION_JSON_VALUE))})
  public ResponseEntity<List<UserPreferenceDto>> getUserPreferenceByCode(
      @Pattern(regexp = "\\w+") @PathVariable String userCode, @Parameter(hidden = true) Pageable pageable) {

     ...
  }
kqqjbcuj

kqqjbcuj2#

您可以尝试类似this的方法。在您的控制器中,您已经有了@ApiResponses注解。您需要做的是将@ApiModel添加到您的Product类中,然后将

@ApiModelProperty(notes = "Your comments", required = true, example = "example value")

Product类的成员,即ProductResponseCustomException。需要验证的一件事是,是否可以在ProductResponseCustomException等自定义对象上设置@ApiModelProperty。如果不能,则需要将@ApiModelProperty设置为1级深。
如文章中所示,这些示例是从模型属性自动填充到响应的。
PS:到目前为止,我还没有一个昂首阔步的项目设置,所以只能在理论上帮助你。

jtw3ybtb

jtw3ybtb3#

晚上好,希望你一切都好。在你所描述的情况下,我会这样做

@ApiResponses(value = { 
  @ApiResponse(responseCode = "200", description = "Found the book", 
    content = { @Content(mediaType = "application/json", 
      schema = @Schema(implementation = Book.class)) }),
  @ApiResponse(responseCode = "400", description = "Invalid id supplied", 
    content = @Content),

所描述的方法在here中进行了解释。我认为第9段。使用@Operation和@ApiResponses生成文档对您的情况特别有用。希望这对您有所帮助,祝您晚安

相关问题