SpringFox Swagger-删除200条回复

时间:2019-05-20 10:52:24

标签: spring-boot swagger springfox

我正在使用Swagger注释和SpringFox为我的REST API(通过Sprint Boot构建)生成Swagger规范。我正在用将返回的@ApiResponse代码注释每个方法。例如:

@DeleteMapping("/{pipelineName}")
@ApiOperation(value = "Delete a specific pipeline")
@ApiResponses({
    @ApiResponse(code = 204, message = "Pipeline has been deleted"),
    @ApiResponse(code = 404, message = "Pipeline does not exist")
})
public void deletePipeline(@PathVariable("pipelineName") @ApiParam(value = "Name of pipeline", required = true) String name){
    ...
}

但是,某些东西(我假设是SpringFox)正在为每个API调用添加200响应代码,而不管它是否已定义。我知道我可以通过在每个方法中添加一个@ResponseStatus注释来删除此注释,但是a)似乎不必要地复制了@ApiResponse定义,b)一些方法可以返回多个2xx代码之一。

是否可以删除默认添加的200条代码?

3 个答案:

答案 0 :(得分:0)

我要做的是:

    @DeleteMapping("/{pipelineName}")
    @ApiOperation(value = "Delete a specific pipeline")
    @ApiResponses({
        @ApiResponse(code = 204, message = "Pipeline has been deleted"),
        @ApiResponse(code = 404, message = "Pipeline does not exist")
    })
    public @ResponseBody ResponseEntity<Object> deletePipeline(@PathVariable("pipelineName") @ApiParam(value = "Name of pipeline", required = true) String name){
        if (deleted) {
       return new ResponseEntity<>("Pipeline has been deleted", HttpStatus.CREATED); //code 204
} else {
return new ResponseEntity<>("Pipeline does not exist", HttpStatus.NOT_FOUND); //code 404
}
    }

现在,我不会使用204作为表示已删除某些内容的代码,我会将其保留为200,但这取决于您。

希望这会有所帮助!

答案 1 :(得分:0)

我相信您需要按照问题中的说明为方法定义默认响应状态。@ApiResponse来自Springfox,@ResponseStatus来自Spring框架。这并非完全重复。 HTTP 200响应是默认行为,Springfox不做任何更改,因此,它只是在自动检测到的代码之上添加了其他代码。

HTTP 204示例:

@ResponseStatus(value = HttpStatus.NO_CONTENT)

在您的代码中:

DeleteMapping("/{pipelineName}")
@ApiOperation(value = "Delete a specific pipeline")
@ApiResponses({
    @ApiResponse(code = 204, message = "Pipeline has been deleted"),
    @ApiResponse(code = 404, message = "Pipeline does not exist")
})
@ResponseStatus(value = HttpStatus.NO_CONTENT)
public void deletePipeline(@PathVariable("pipelineName") @ApiParam(value = "Name of pipeline", required = true) String name){
    ...
}

对于其他正在检查此主题的用户:如果Springfox正在生成其他HTTP代码,则可能还需要this

答案 2 :(得分:0)

当前,您无法删除标准的200代码。我在github上发现了相同的问题,开发人员说这是springfox中的错误:

您可以在此link

中了解此内容

我试图在2.9.2版本的SpringFox中删除200条代码,但该错误仍然存​​在