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验证选项吗?
答案 0 :(得分:2)
在最新版本的生成器中(我最后检查过3.3.4),有2个影响Bean验证的属性。这些属性是performBeanValidation和useBeanValidation(默认情况下为true)。要了解它们的工作方式,您应该查看生成器使用的胡须模板以及生成器属性。这些可以在JavaSpring Mustache files中找到。
例如,如果您的API Yaml包含带有“格式:电子邮件”的属性,则在执行和不执行PerformBeanValidation的情况下,您将看到不同的行为。使用performBeanValidation = true时,生成器将输出@Email验证注释。使用performBeanValidation = false时,您将看不到此注释。通过查看以下胡子文件可以了解这一点:beanValidationCore
您可以通过将原始Mustache文件从源位置复制到您自己的项目位置并根据需要进行修改来覆盖所有这些Mustache模板。然后,您将项目位置作为参数或属性提供给生成器。例如templateDirectory = src / main / resources / mustache
Blockquote
<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>