Cómo quitar el cuerpo de la respuesta de una operación en Springfox Swagger?

Iñaki:

Estoy trabajando en un servicio REST hecho con el resorte de la inicialización, que hasta hoy se documentan con springfox-swagger2: 2.7.0 (aplicación en primer lugar). La última operación que he añadido es similar al siguiente:

@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();
  }
}

Ahora, el problema es que no importa qué, termina la definición Swagger generada por parecerse a esto:

"responses": {
  "204": {
    "description": "Returns empty content when succeeds",
    "schema": {
      "$ref": "#/definitions/ResponseEntity"
    }
  },
  "403": {
    "description": "You can't do that."
  }
}

Siempre que esta operación vuelve nada, entiendo que la respuesta "204" no debe tener ningún schemacampo (como el otro).

He intentado especificando response = Void.classen la @ApiParamanotación (como se sugiere en otros hilos) sin alegría (ya que es el valor por defecto es indistinguible de no especificarlo).

También he intentado fijar genericModelSubstitutes(ResponseEntity.class)en mi Docketfrijol y que no hizo nada.

Sé que en vez de volver ResponseEntityyo pudiera regresar voidy lanzar y excepción en casos de someMethodReturnsTrue()retornos de hecho false. Un @ExceptionHandlermétodo podría entonces convertir esa excepción en un código de estado 403.

Creo que esto es una exageración, creo que no debería estar cambiando mi aplicación para arreglar mi documentación. Por eso me pregunto, ¿hay alguna manera de saber Springfox ignorar el valor de retorno de ese método específico y tratarlo como si fuera devuelto void?

Gracias.

Vlad Maier:

Añadir:

@ApiResponse(code = 204, response = void.class, message = "No Content")

a su @ApiResponses({ ... })anotación. Es importante que void.classse utiliza en lugar de Void.class. Por lo que es diferente del valor por defecto y todavía se puede utilizar ResponseEntitycomo un tipo de retorno.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=191850&siteId=1
Recomendado
Clasificación