Springfox 在 Swagger 2.0 JSON 定义中创建 'ref' 类型而不是 java.io.File 对象
Springfox creates 'ref' type instead of java.io.File object in Swagger 2.0 JSON Definition
我试图描述一个 REST POST 端点,它使用来自 Swagger 的 Java 注释将两个 java.io.File
对象作为 multipart/form-data
有效负载的一部分。根据初步研究,我发现这可以通过指定具有以下属性集的隐式参数来实现(即 type
、dataType
和 paramType
)
@ApiImplicitParams({
@ApiImplicitParam(
name="controlFile",
value="Control file to be used in the comparison.",
required=true,
type="file",
paramType="form",
dataType="java.io.File"),
@ApiImplicitParam(
name="testFile",
value="Test file to be used in the comparison.",
required=true,
type="file",
paramType="form",
dataType="java.io.File")
})
@PostMapping(
consumes=MediaType.MULTIPART_FORM_DATA,
produces=MediaType.APPLICATION_JSON
)
public ResponseEntity<Void> submitComparisonRequest(
final UriComponentsBuilder uriBuilder,
@Context final HttpServletRequest request) {
try {
final FileItemFactory factory = new DiskFileItemFactory();
final ServletFileUpload upload = new ServletFileUpload(factory);
final FileItemIterator items = upload.getItemIterator(request);
final FileItemStream control = items.next();
final FileItemStream test = items.next();
在描述这些参数的 JSON 合同部分,一切看起来都是正确的 除了 type
字段值是 ref
出乎意料的 java.io.File
.
"parameters": [
{
"name": "controlFile",
"in": "formData",
"description": "Control file to be used in the comparison.",
"required": true,
"type": "ref"
},
{
"name": "testFile",
"in": "formData",
"description": "Test file to be used in the comparison.",
"required": true,
"type": "ref"
}
],
我尝试了几种不同的组合,使用 dataType
与 dataTypeClass
和 this SO 问题中的其他策略,但我无法获得 JSON 合同正确生成。
作为参考,我使用的是 Springfox 2.9.2 和 SpringMVC 5.2.2。
在进一步挖掘之后,我发现 @ApiImplicitParam
参数的 dataType
不应该是 java.io.File
对象的完全限定路径,应该指定它作为 __file
.
Here 是对 SpringFox 文档的 link。 (在 6.5 覆盖 属性 数据类型下列出)
我试图描述一个 REST POST 端点,它使用来自 Swagger 的 Java 注释将两个 java.io.File
对象作为 multipart/form-data
有效负载的一部分。根据初步研究,我发现这可以通过指定具有以下属性集的隐式参数来实现(即 type
、dataType
和 paramType
)
@ApiImplicitParams({
@ApiImplicitParam(
name="controlFile",
value="Control file to be used in the comparison.",
required=true,
type="file",
paramType="form",
dataType="java.io.File"),
@ApiImplicitParam(
name="testFile",
value="Test file to be used in the comparison.",
required=true,
type="file",
paramType="form",
dataType="java.io.File")
})
@PostMapping(
consumes=MediaType.MULTIPART_FORM_DATA,
produces=MediaType.APPLICATION_JSON
)
public ResponseEntity<Void> submitComparisonRequest(
final UriComponentsBuilder uriBuilder,
@Context final HttpServletRequest request) {
try {
final FileItemFactory factory = new DiskFileItemFactory();
final ServletFileUpload upload = new ServletFileUpload(factory);
final FileItemIterator items = upload.getItemIterator(request);
final FileItemStream control = items.next();
final FileItemStream test = items.next();
在描述这些参数的 JSON 合同部分,一切看起来都是正确的 除了 type
字段值是 ref
出乎意料的 java.io.File
.
"parameters": [
{
"name": "controlFile",
"in": "formData",
"description": "Control file to be used in the comparison.",
"required": true,
"type": "ref"
},
{
"name": "testFile",
"in": "formData",
"description": "Test file to be used in the comparison.",
"required": true,
"type": "ref"
}
],
我尝试了几种不同的组合,使用 dataType
与 dataTypeClass
和 this SO 问题中的其他策略,但我无法获得 JSON 合同正确生成。
作为参考,我使用的是 Springfox 2.9.2 和 SpringMVC 5.2.2。
在进一步挖掘之后,我发现 @ApiImplicitParam
参数的 dataType
不应该是 java.io.File
对象的完全限定路径,应该指定它作为 __file
.
Here 是对 SpringFox 文档的 link。 (在 6.5 覆盖 属性 数据类型下列出)