Swagger выдает слишком длинную константу для тела ответа по умолчанию - PullRequest
0 голосов
/ 10 декабря 2018

По сути, требуется сгенерировать действительные Java8 модели и класс контроллеров с помощью swagger-codegen-maven-plugin .

У меня есть спецификация swagger 2.0, содержащая модельопределения с полями массива, где каждый элемент массива, в свою очередь, содержит свой собственный массив моделей.

Swagger успешно генерирует Java-модели и аннотированный интерфейс, этот интерфейс содержит тело ответа по умолчанию, представляющее пример автоматически сгенерированного ответа JSON для корневой модели и всеэто субмодели.На самом деле, это проблема:

Для каждого поля массива сваггер всегда создает 2 элемента, еще 2 подпункта для каждого поля массива элементов и т. Д., Что приводит к очень длинной строковой константе в Java.Swagger генерирует эту строку без каких-либо проблем, но компилятор Java просто не может ее обработать и падает с ошибкой компиляции: константа слишком длинная .

Я пытался найти способ уменьшитьколичество элементов в массиве модели или вообще отключить генерацию тела.Похоже, что нет конфигурации obviouse для управления этим.

Есть ли способ отключить генерацию тела по умолчанию или любые другие вещи для управления длиной генерируемой строки?

Сгенерированный код не может быть зафиксирован, поэтому нетспособ вручную исправить сгенерированный код и использовать его впоследствии.После завершения работы плагина swagger-codegen требуется получить скомпилированный Java-код.

Существует конфигурация codegen maven, используемая для генерации исходных кодов (протестировано для версий 2.3.1 и 2.4.0):

 <plugin>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-codegen-maven-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <configOptions>
                        <sourceFolder>java</sourceFolder>
                        <dateLibrary>java8</dateLibrary>
                    </configOptions>
                    <generateSupportingFiles>false</generateSupportingFiles>
                    <addCompileSourceRoot>false</addCompileSourceRoot>
                    <generateApiDocumentation>false</generateApiDocumentation>
                    <generateApiTests>false</generateApiTests>
                    <generateModelDocumentation>false</generateModelDocumentation>
                    <generateModelTests>false</generateModelTests>
                    <ignoreFileOverride>${project.basedir}</ignoreFileOverride>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

1 Ответ

0 голосов
/ 11 декабря 2018

Наконец-то я нашел проблему.

Хитрость заключалась в добавлении раздела examples для ответа , который переопределяет генерацию примеров по умолчанию в swagger.

По-прежнему существует проблема в самом генераторе сваггера - он не может создать допустимый код Java для моделей с большими откликами и все еще ограничен константной длиной строки Java.

Рабочая часть спецификации ответа выглядит следующим образом:

    responses:
     200:
      description: Some text
      schema:
       $ref: '#/definitions/Model'
      examples:
       stub:
...