Я работаю в 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
бобе, и это ничего не сделало.
Я знаю, что вместо возврата ResponseEntity
я мог бы вернуть void
, а также throw и исключение, если someMethodReturnsTrue()
вернет false
. Метод @ExceptionHandler
может затем превратить это исключение в код состояния 403.
Я думаю, что это излишне, я думаю, что я не должен менять свою реализацию, чтобы исправить мою документацию. Вот почему я спрашиваю, есть ли способ сказать Springfox игнорировать возвращаемое значение этого конкретного метода и обрабатывать его, как если бы он возвратил void
?
Спасибо.