Java 如何删除Springfox Swagger中操作的响应主体?

Java 如何删除Springfox Swagger中操作的响应主体?,java,spring-mvc,swagger-2.0,openapi,springfox,Java,Spring Mvc,Swagger 2.0,Openapi,Springfox,我在使用SpringBoot开发的REST服务中工作,到目前为止,它是使用springfox-swagger2:2.7.0(实现优先)记录的。我添加的最后一个操作如下所示: @ApiOperation(value = "whatever") @ApiResponses({ @ApiResponse(code = HttpURLConnection.HTTP_NO_CONTENT, message = "Returns empty content when succeeds"),

我在使用SpringBoot开发的REST服务中工作,到目前为止,它是使用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();
  }
}
"responses": {
  "204": {
    "description": "Returns empty content when succeeds",
    "schema": {
      "$ref": "#/definitions/ResponseEntity"
    }
  },
  "403": {
    "description": "You can't do that."
  }
}
现在的问题是,不管怎样,生成的招摇过市定义最终都是这样的:

@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();
  }
}
"responses": {
  "204": {
    "description": "Returns empty content when succeeds",
    "schema": {
      "$ref": "#/definitions/ResponseEntity"
    }
  },
  "403": {
    "description": "You can't do that."
  }
}
假设此操作不返回任何内容,我理解“204”响应应该没有
schema
字段(与另一个类似)

我尝试在
@ApiParam
注释中指定
response=Void.class
(正如在其他线程中所建议的那样),但毫无乐趣(因为它是默认值,无法与不指定区分)

我还尝试在我的
Docket
bean中设置
genericmodelssubstitutes(ResponseEntity.class)
,但没有任何效果

我知道,如果
someMethodReturnsTrue()
确实返回
false
,我可以返回
void
并抛出异常,而不是返回
ResponseEntity
。然后,
@ExceptionHandler
方法可以将该异常转换为403状态代码

我认为这太过分了,我认为我不应该改变我的实现来修复我的文档。这就是为什么我要问,有没有办法告诉Springfox忽略该特定方法的返回值,并将其视为返回了
void

谢谢。

添加:

@ApiResponse(code = 204, response = void.class, message = "No Content")
到您的
@ApiResponses({…})
注释。重要的是使用了
void.class
而不是
void.class
。因此,它与默认值不同,您仍然可以使用
ResponseEntity
作为返回类型。

找到了解决方法, 由于@ApiOperation的默认行为是返回方法的返回类型,因此对于每个状态,都将返回方法的返回类型。 如果要发送空响应,请写入

@ApiResponse(code = 204, message = "No User found for that Id",response = Object.class)
在大摇大摆地写着

 @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .directModelSubstitute(Object.class, java.lang.Void.class);          
    }

因此,每当返回Object.class时,swagger会自动将其转换为Void.class,但这不起作用。仍然显示出身体的反应。实际上,您必须使资源方法返回类型为“void”,才能从文档中删除响应主体。不幸的是,我找不到一种方法来获得ResponseEntity(仅以标题为例),它在文档中显示为“无正文”:/您好,我实际上找到了一个在resource方法中返回ResponseEntity的解决方案,同时让它在文档中显示一个空体: