【发布时间】:2018-05-04 14:15:42
【问题描述】:
我正在向 Spring Boot 应用程序发布多部分表单。
例如
@PostMapping(value = "/foo", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void postFooAsMultiPart(@RequestBody Foo foo) {
...
}
Spring 在将多部分请求编组到对象 (StandardServletMultipartResolver) 方面做得非常好。
我正在使用 Swagger(Springfox) 呈现端点。依赖:
- io.springfox:springfox-swagger2:2.8.0
- io.springfox:springfox-swagger-ui:2.8.0
但是,它将整个主体渲染为一个字段:
http://localhost:8080/v2/api-docs
...
"parameters": [
{
"in": "body",
"name": "foo",
"description": "foo",
"required": true,
"schema": {
"$ref": "#/definitions/Foo"
}
}
],
...
我的问题是:是否可以让 Swagger 将 Foo 的每个属性呈现为单独的参数?
注意:作为一种解决方法,我使用@ApiImplicitParams 在控制器级别指定所有 Foo 的属性。但是,我认为这更像是一种解决方法,而不是正确的解决方案。
编辑 我花了一些时间来跟踪代码,我很确定当前版本无法做到这一点。我在 GitHub 存储库上打开了an issue,建议进行更改。我会根据结果更新/回答这个问题。
【问题讨论】:
-
我相信,如果您删除了
@RequestBody注释,它应该可以在无需添加@ApiImplicitParams注释的情况下工作。 -
@DilipKrishnan 如果我这样做,它会将属性添加为查询参数,然后大摇大摆地以这种方式发送它们。例如。
{ "name": "bar", "in": "query", "description": "Bar description", "required": false, "type": "string" }
标签: spring spring-boot swagger springfox