如何在openApi / springfox-swagger2中为不同的状态代码定义不同的响应模型

问题描述 投票:0回答:1

给定以下带有springfox-swagger2注释的REST方法:

@GetMapping(value = "/access", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation(value = "check access allowed")
@ApiResponses({
        @ApiResponse(code = 200, message = "okay, there you go", response = AccessResponse.class),
        @ApiResponse(code = 204, message = "I got nothing for you", response = Void.class)
})
public ResponseEntity<AccessResponse> access() {

    if (!isAccessEnabled()) {
        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }
    AccessResponse response = new AccessResponse("some data");
    return ResponseEntity.ok(response);
}

请注意,此方法可以返回两种状态:

  1. AccessResponse类型的响应
  2. http 204 - 没有内容回复

我想生成一个反映不同响应模型(AccessResponse vs. Void)的swagger api文档。在@ApiResponse注释中,我明确告诉springfox-swagger2为每个状态使用不同的模型。不幸的是,生成的swagger api doc json仅指http 200和204的AccessResponse模型:

"responses":{
  "200":{
    "description":"okay, there you go",
    "schema":{"$ref":"#/definitions/AccessResponse"}
    },
  "204":{
    "description":"I got nothing for you",
    "schema":{"$ref":"#/definitions/AccessResponse"}
    }
}

我错过了什么吗?有没有办法告诉swagger为每个HTTP / ok状态代码渲染两个不同的模型?

java swagger swagger-2.0 openapi springfox
1个回答
0
投票

我已经更改了方法的返回类型 - 删除泛型类型:

public ResponseEntity access()

这导致更好(但不完美)的模型描述:

"204":{
   "description": "I got nothing for you",
   "schema":{"type":"object"}
}

Swagger UI呈现此内容

enter image description here

我喜欢它现在显示空体。但是,statusCode有点恼人。

© www.soinside.com 2019 - 2024. All rights reserved.