【问题标题】:How can I use the useBeanValidation option when generating code in Swagger?在 Swagger 中生成代码时如何使用 useBeanValidation 选项?
【发布时间】:2018-11-23 09:18:11
【问题描述】:

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

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

【问题讨论】:

  • 看看这个vojtechruzicka.com/…,好像JSR-303 没有OOB
  • 感谢您的链接。它澄清了一些事情,但我仍然感到困惑。它讨论了我的模型类中的注释。但根据我的经验,它不会读取我的模型类。它是在谈论我添加到 swagger 生成的模型中的注释吗?还是有其他设置告诉它读取我的 Hibernate 数据bean?

标签: swagger code-generation bean-validation


【解决方案1】:

在最新版本的生成器(我上次检查的是 3.3.4)中有 2 个属性会影响 bean 验证。这些属性是performBeanValidationuseBeanValidation(都是false by default)。要了解它们是如何工作的,您应该查看生成器结合生成器属性使用的 mustache 模板。这些可以在JavaSpring Mustache files 中找到。

例如,如果您的 API yaml 包含使用 format: email 定义的属性,您将看到带有和不带有 performBeanValidation 的不同行为。使用performBeanValidation=true,生成器输出@Email 验证注释。使用performBeanValidation=false,您将看不到此注释。这可以通过查看以下胡子文件来理解: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>

【讨论】:

  • 只是添加,为了添加自定义 bean 验证,需要在 mustache 模板上使用前缀“#vendorExtensions”,例如 {{#vendorExtensions.x-customValidation}}@com.my.CustomValidation {{/vendorExtensions.x-customValidation}}
  • 谢谢,这很有帮助。但我希望他们的文档中有一些页面可以解释如何使用它。我不想为了找出配置属性的用途而学习如何阅读 .mustache 文件。这不是在某处记录的吗? (我找不到。)
  • 据我所知没有记录。 github.com/OpenAPITools/openapi-generator/issues/5637中的部分描述与您的评论一致。
  • “要了解它们的工作原理,您应该查看 mustache 模板” - 不,我应该能够找到文档中描述的行为:-/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2019-04-09
  • 2016-07-08
  • 2018-03-01
相关资源
最近更新 更多