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

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

左丘成业
2023-03-14

我在一个REST服务中工作,该服务是由Spring Boot的,到目前为止,它是使用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."
  }
}

如果这个操作不返回任何内容,我理解204响应应该没有模式字段(像另一个字段一样)。

我尝试在@ApiParam注释中指定响应=Void.class(如其他线程中建议的),但没有任何乐趣(因为它是默认值,所以无法与不指定它区分开来)。

我还尝试了在我的Docket bean中设置GenericModelSubures(响应ntity.class),但没有任何效果。

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

我认为这是大材小用,我认为我不应该改变我的实现来修复我的留档。这就是为什么我问,有没有办法告诉Springfox忽略那个特定方法的返回值,并将其视为返回了val

谢谢。

共有2个答案

关昊天
2023-03-14

加:

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

到您的@Api响应({...})注释。重要的是使用void.class代替Void.class。所以它与默认值不同,您仍然可以使用响应实体作为返回类型。

岳涵煦
2023-03-14

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

@ApiResponse(code = 204, message = "No User found for that Id",response = Object.class)

在SwaggerConfig中写道

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

所以每当一个物体。类返回时,swagger将自动将其转换为Void。班

 类似资料:
  • 我想删除MVC中的http响应头。 HTTP/1.1 404找不到缓存-控件:私有内容-类型:text/html;charst=UTF-8服务器:Microsoft-IIS/8.0X-Powered-by:ASP.NET日期:Mon,23 Feb 2015 12:43:58 GMT内容-长度:4898连接:Keep-Alive 我使用以下代码删除连接、X-Powered-By、Server、Cac

  • 我想从(RubyonRails)响应中删除一些头文件 报头响应: HTTP/1.1 200正常 日期:2013年6月6日星期四14:42:26 GMT 连接:保持活动状态 X运行时间:0.01900 内容类型:文本/纯文本;字符集=utf-8 缓存控制:专用,最大年龄=0,必须重新验证 服务器:WEBrick/1.3.1(Ruby/1.8.7/2012-10-12) 内容长度:281 Etag:“

  • 问题内容: 在将文件作为对REST请求的响应返回后,处理删除文件的最佳方法是什么? 我有一个端点,可根据请求创建文件并在响应中返回它。发送响应后,就不再需要该文件,可以/应该将其删除。 我想我可以创建一个tmp文件,但是我本来以为有一种更优雅的机制可以实现这一目标。该文件可能很大,因此我无法将其加载到内存中。 问题答案: 有一个 更优雅的解决方案 ,不写文件,只需直接写入实例中包含的输出流即可。

  • 主要内容:验证删除结果其他开发人员在更新他的本地存储库后,在目录中找到一个文件。查看提交消息后,了解到文件是由添加的。 现在,假设要对上面的项目中代码结构进行重构,代码文件:module.py 已经不再使用了,要将它删除,那么应该怎么做?请参考以下命令 - 验证删除结果 在另外一台电脑上,执行以下命令更新当前工作区,查看 目录中的文件是否还存在?

  • 嗨,我是ElasticSearch的新手,我正在努力从ElasticSearch的响应中删除所有额外字段。请参见以下回复: 上面你可以看到响应中有一些附加字段,如_index、_type、_score、max_score等。我按照ElasticSearchresponse_filtering指南删除了这些字段,但对我不起作用。我还将filter_path参数传递给请求0.0.0.0:5000/v4

  • 命令用于从数据库和不同模式中删除表。参考以下步骤: 假设要从模式 db2inst1 中删除表。 可以看到该表在列表中可用,然后点击Execute SQL ,如下所示: 可以看到,表已经被删除了。如下图所示: