我正在使用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条代码?
答案 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条代码,但该错误仍然存在