我试图描述一个REST POST端点,它需要两个 java.io.File
对象的一部分 multipart/form-data
使用Swagger的Java注解来实现有效载荷。经过初步研究,我发现这可以通过指定隐式参数和设置以下属性来实现(即 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
和其他战略,从内到外 这个 SO问题,但我一直无法正确生成JSON合同。
作为参考,我使用的是Springfox 2.9.2和SpringMVC 5.2.2。
在深入研究之后,我发现 dataType
对于 @ApiImplicitParam
参数不应该是通往 java.io.File
对象,它应该被指定为 __file
.
喏 是指向SpringFox文档的链接。(列在6.5 覆盖属性数据类型下)