Как я могу использовать опцию useBeanValidation при генерации кода в Swagger? - PullRequest
0 голосов
/ 23 ноября 2018

Генерация кода Swagger для сервера Spring имеет опцию useBeanValidation, но я не могу понять, как ее использовать.Я не смог найти никакой документации, в которой говорилось бы, какие проверки она поддерживает, поэтому я решил попробовать это сам.Описание спецификации объекта схемы в спецификации OpenAPI перечисляет следующие свойства:

title
multipleOf
maximum
exclusiveMaximum
minimum
exclusiveMinimum
maxLength
minLength
pattern
maxItems
minItems
uniqueItems
maxProperties
minProperties
required
enum

Поэтому я попытался добавить некоторые из этих свойств в поля созданного мной объекта.Вот соответствующая часть моего файла .yaml:

components:
  schemas:
    Dummy:
      type: object
      properties:
        iMinMax:
          type: integer
          format: int32
          minimum: 0
          maximum: 100
        dMinMaxEx:
          type: number
          format: int32
          minimum: 5.0
          maximum: 10.0
          exclusiveMinimum: false
          exclusiveMaximum: true
        dMinExMaxEx:
          type: number
          format: int32
          minimum: 5.0
          maximum: 10.0
          exclusiveMinimum: true
          exclusiveMaximum: true
        dMinExMax:
          type: number
          format: int32
          minimum: 5.0
          maximum: 10.0
          exclusiveMinimum: true
          exclusiveMaximum: false
        sArray:
          type: array
          items:
            type: string
          minItems: 5
          maxItems: 10
          uniqueItems: true
        sLen:
          type: string
          format: text
          minLength: 5
          maxLength: 10

Я включил опцию проверки bean-компонента генератора кода Spring и сгенерировал код сервера, но это не имело никакого эффекта.Код, который он сгенерировал, был точно таким же, как при отключенной опции.Кто-нибудь знает, как использовать опцию Swagger's Bean Validation?

1 Ответ

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

Есть 2 свойства, которые влияют на валидацию бина в последней версии генератора (3.3.4, последний раз проверенный мной).Эти свойства являются executeBeanValidation и useBeanValidation (это по умолчанию верно).Чтобы понять, как они работают, вы должны взглянуть на шаблоны усов, которые генератор использует в сочетании со свойствами генератора.Их можно найти в файлах JavaSpring Mustache .

. Например, вы увидите различное поведение с и без executeBeanValidation, если ваш yaml API содержит атрибут с «format: email».С executeBeanValidation = true генератор выводит аннотацию проверки @Email.С executeBeanValidation = false вы не увидите эту аннотацию.Это можно понять, посмотрев на следующий файл с усами: beanValidationCore

Вы можете переопределить любые из этих шаблонов с усами, скопировав исходный файл с усами из исходного местоположения в свое местоположение проекта и изменив его.как требуется.Затем вы указываете местоположение проекта в качестве параметра или свойства для генератора.например, templateDirectory = src / main / resources / mustache

Цитата

        <plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <version>${openapi-codegen-version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>api.yaml</inputSpec>
                        <output>target/generated-sources</output>
                        <apiPackage>my.package.api</apiPackage>
                        <modelPackage>my.package.api.model</modelPackage>
                        <generatorName>spring</generatorName>
                        <templateDirectory>src/main/resources/mustache</templateDirectory>
                        <!--<configHelp>true</configHelp>-->
                        <!--<verbose>true</verbose>-->
                        <configOptions>
                            <dateLibrary>java8-localdatetime</dateLibrary>
                            <java8>false</java8>
                            <interfaceOnly>true</interfaceOnly>
                            <performBeanValidation>true</performBeanValidation>
                            <useBeanValidation>true</useBeanValidation>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>
...