Я работаю в службе REST, созданной с помощью spring -boot, которая до сих пор документирована с помощью springfox-swagger2: 2.7.0 (сначала реализация). Последняя добавленная мной операция выглядит так:
@ApiOperation(value = "whatever")
@ApiResponses({
@ApiResponse(code = HttpURLConnection.HTTP_NO_CONTENT, message = "Returns empty content when succeeds"),
@ApiResponse(code = HttpURLConnection.HTTP_FORBIDDEN, message = "You can't do that.")
})
@CrossOrigin
@PreAuthorize("hasAuthority('USER_ACCESS')")
@RequestMapping(value = "/foo", method = POST, consumes = APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.NO_CONTENT)
public ResponseEntity postFoo(
@RequestBody
FooRequestBody requestBody) {
if (someMethodReturnsTrue()) {
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
}
Теперь проблема в том, что, несмотря ни на что, сгенерированное определение Swagger в конечном итоге выглядит следующим образом:
"responses": {
"204": {
"description": "Returns empty content when succeeds",
"schema": {
"$ref": "#/definitions/ResponseEntity"
}
},
"403": {
"description": "You can't do that."
}
}
Если эта операция ничего не возвращает, я понимаю, что в ответе «204» не должно быть поля schema
(как и в другом).
Я попытался указать response = Void.class
в аннотации @ApiParam
(как предлагается в других потоках) без особого удовольствия (поскольку это значение по умолчанию, оно неотличимо от того, чтобы не указывать его).
Я также пробовал установить genericModelSubstitutes(ResponseEntity.class)
в свой Docket
bean, но ничего не сделал.
Я знаю, что вместо возврата ResponseEntity
я мог бы вернуть void
и выбросить и исключить, если someMethodReturnsTrue()
действительно вернет false
. Затем метод @ExceptionHandler
может превратить это исключение в код состояния 403.
Я думаю, что это перебор, я думаю, мне не следует менять свою реализацию, чтобы исправить мою документацию. Вот почему я спрашиваю, есть ли способ указать Springfox игнорировать возвращаемое значение этого конкретного метода и рассматривать его, как если бы он возвращал void
?
Спасибо.