Springfox создает тип ref вместо java .io.File объекта в Swagger 2.0 JSON Определение - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь описать конечную точку 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.

1 Ответ

0 голосов
/ 05 мая 2020

Покопавшись еще немного, я обнаружил, что dataType для параметров @ApiImplicitParam не должен быть полным путем к объекту java.io.File, он должен быть указан как __file.

Здесь - ссылка на документацию SpringFox. (Перечислено в разделе 6.5 Переопределение типов данных свойств)

...