Я пытаюсь описать конечную точку REST POST, которая принимает два объекта java.io.File
как часть полезной нагрузки multipart/form-data
, используя аннотации Java от Swagger. После первоначального исследования я обнаружил, что этого можно достичь, указав неявные параметры со следующими наборами свойств (а именно 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
vs dataTypeClass
и других стратегий из этого SO вопроса, но мне не удалось правильно сгенерировать контракт JSON.
Для справки, я использую Springfox 2.9.2 и Spring MVC 5.2.2.