在 Swagger 中生成代码时如何使用 useBeanValidation 选项?

Mig*_*noz 7 code-generation bean-validation swagger

Swagger 为 Spring 服务器生成的代码有一个名为 useBeanValidation 的选项,但我不知道如何使用它。我找不到任何文档告诉我它支持哪些验证,所以我决定自己尝试一下。OpenAPI 规范对架构对象属性的描述列出了这些属性:

title
multipleOf
maximum
exclusiveMaximum
minimum
exclusiveMinimum
maxLength
minLength
pattern
maxItems
minItems
uniqueItems
maxProperties
minProperties
required
enum
Run Code Online (Sandbox Code Playgroud)

所以我尝试将其中一些属性添加到我创建的对象的字段中。这是我的 .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
Run Code Online (Sandbox Code Playgroud)

我打开了Spring代码生成器的bean验证选项,生成了服务端代码,但是没有任何效果。它生成的代码与关闭该选项时完全相同。有谁知道如何使用 Swagger 的 Bean Validation 选项?

Cod*_*per 12

有 2 个属性会影响最新版本的生成器中的 bean 验证(我最后检查的是 3.3.4)。这些属性是performBeanValidationuseBeanValidationfalse 默认情况下都是)。要了解它们是如何工作的,您应该查看生成器与生成器属性结合使用的 mustache 模板。这些可以在JavaSpring Mustache 文件中找到

例如,performBeanValidation如果您的 API yaml 包含使用 format: email. 与performBeanValidation=true所述发电机输出@Email的验证注解。随着performBeanValidation=false你不会看到这个注解。这可以通过查看以下 mustache 文件来理解:beanValidationCore

您可以通过将原始 Mustache 文件从源位置复制到您自己的项目位置并根据需要对其进行修改来覆盖这些 Mustache 模板中的任何一个。然后将项目位置作为参数或属性提供给生成器。例如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>
Run Code Online (Sandbox Code Playgroud)

  • 只是添加,为了添加自定义 bean 验证,需要在 Mustache 模板上使用前缀“#vendorExtensions”,例如 {{#vendorExtensions.x-customValidation}}@com.my.CustomValidation{{/vendorExtensions.x-customValidation }} (2认同)
  • 谢谢,这很有帮助。但我希望他们的文档中有一些页面可以解释如何使用它。我不想仅仅为了找出配置属性的用途而学习如何读取 .mustache 文件。这不是在某处记录的吗?(我找不到它。) (2认同)