当前位置: 首页 > 知识库问答 >
问题:

SpringFox招摇过市-删除200个响应

鄢英毅
2023-03-14

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

@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个答案

云煌
2023-03-14

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

你可以在这个链接中阅读

我试图删除2.9.2版本的SpringFox中的200代码,这个错误仍然存在

曾奇略
2023-03-14

我要做的是:

    @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,但这取决于您。

希望这有帮助!

郁宾鸿
2023-03-14

我相信您需要定义您的方法的默认响应状态,正如您在问题中提到的。这并不完全是重复。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代码,您可能也需要此代码

 类似资料:
  • 我的pom.xml 招摇过市配置 服务器日志 它说映射: 但这些都不起作用(404): 如果我使用sping-fox较低版本,那么我将在我的日志中得到它已映射{[/v2/api-docs}],方法=[GET]。但是,我看不到在那里生成的任何json。

  • 我对使用SpringBoot和Springfox-boot-starter的swagger文档有一个问题。 我使用java.time.Instant java.util.Optio包裹 有没有办法让这个工作与可选的?感谢任何建议! Spring启动版本: Springfox-boot-starter版本

  • 我试图在我的微服务项目中生成一个单独的招摇过市,在Api网关中将所有服务招摇过市聚合成一个单独的招摇过市。为了实现这一点,我将遵循下一个教程https://objectpartners.com/2017/09/28/aggregate-services-into-a-single-swagger 这里的问题是,当我尝试设置绝对URL时,我收到的输出是未能加载API定义。未定义的http://loc

  • 我在Spring Boot 2项目中添加了Springfox Swagger 2.8.0,在应用程序启动期间,遇到以下问题: 这个问题的原因是什么?如何解决它?

  • 我有这样简单的控制器: 我原以为只有HTTP状态200的响应消息。然而,springfox总是生成下面的(401, 403, 404)。如何禁用(不显示)它们?

  • pom.xml Spring Security配置 application-local.yml 我得到这个结果。 无法呈现此定义提供的定义未指定有效的版本字段。 请注明有效的或版本字段。支持的版本字段是swagger: 2.0和与openapi: 3.0. n匹配的版本字段(例如,openapi: 3.0.0)。