Как определить разные модели ответов для разных кодов состояния в openApi / springfox-swagger2 - PullRequest
0 голосов
/ 09 апреля 2019

Учитывая следующий метод REST с аннотациями springfox-swagger2:

@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. a http 204 - нет ответа на контент

Я хочу сгенерировать документацию api swagger, отражающую различные модели ответов (AccessResponse vs. Void).Внутри аннотации @ApiResponse я явно указываю springfox-swagger2 использовать разные модели для каждого состояния.К сожалению, сгенерированный swagger api doc json относится только к модели AccessResponse для http 200 и 204:

"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?

1 Ответ

0 голосов
/ 09 апреля 2019

Я изменил тип возвращаемого значения метода - убрал универсальный тип:

public ResponseEntity access()

, что приводит к лучшему (но не идеальному) описанию модели:

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

Swagger UI отображает это как

enter image description here

Мне нравится, что теперь отображается пустое тело,Тем не менее, statusCode немного раздражает.

...