openapi - OpenAPI 生成器 Maven 插件 Bean 验证 MinProperties 验证
问题描述
我有一个使用 Java 11 的 Spring Boot (2.4.0) REST 服务。端点和对象是使用 openapi-generator-maven-plugin v5.0.1 从 OpenAPI 3.0.3 文件生成的
在 API 中有一个带有两个查询参数的 GET 请求。至少其中一个必须在场。此示例提到使用 minProperties。尽管我在 OpenAPI 文件中指定了minProperties,但自动生成的对象并没有对此进行验证。有没有办法让这个工作?
OpenAPI 3.3 代码段:
parameters:
- in: query
name: id
required: true
style: form
explode: true
schema:
title: EntityId
type: object
properties:
businessId:
type: string
nonBusinessId:
type: string
minProperties: 1
additionalProperties: false
openapi-generator-maven-plugin 配置:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.0.1</version>
<executions>
<execution>
<id>generate-api</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.build.directory}/swagger/apis/api.yaml</inputSpec>
<generatorName>spring</generatorName>
<apiPackage>com.acme.api</apiPackage>
<modelPackage>com.acme.api.dto</modelPackage>
<configOptions>
<dateLibrary>java8</dateLibrary>
<interfaceOnly>true</interfaceOnly>
<java8>true</java8>
<useBeanValidation>true</useBeanValidation>
<performBeanValidation>true</performBeanValidation>
<delegatePattern>true</delegatePattern>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
生成的类:
public class EntityId {
@JsonProperty("businessId")
private String businessId;
@JsonProperty("nonBusinessId")
private String nonBusinessId;
public EntityId businessId(String businessId) {
this.businessId = businessId;
return this;
}
/**
* Get businessId
* @return businessId
*/
@ApiModelProperty(value = "")
public String getBusinessId() {
return businessId;
}
public void setBusinessId(String businessId) {
this.businessId = businessId;
}
public EntityId nonBusinessId(String nonBusinessId) {
this.nonBusinessId = nonBusinessId;
return this;
}
/**
* Get nonBusinessId
* @return nonBusinessId
*/
@ApiModelProperty(value = "")
public String getNonBusinessId() {
return nonBusinessId;
}
public void setNonBusinessId(String nonBusinessId) {
this.nonBusinessId = nonBusinessId;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
EntityId entityId = (EntityId) o;
return Objects.equals(this.businessId, entityId.businessId) &&
Objects.equals(this.nonBusinessId, entityId.nonBusinessId);
}
@Override
public int hashCode() {
return Objects.hash(businessId, nonBusinessId);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class EntityId {\n");
sb.append(" businessId: ").append(toIndentedString(businessId)).append("\n");
sb.append(" nonBusinessId: ").append(toIndentedString(nonBusinessId)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}
解决方案
推荐阅读
- r - 根据 grep() 中的行值创建标志
- r - 在两个多面ggplots之一中反转x轴
- python - Django REST API 和 React Native 中的登录和身份验证功能
- richfaces - X-Frame-Options 标头不包含在 ajax4jsf 和 Richfaces 的 HTTP 响应中
- python - 为什么 Python 2.7 报告的上限值不正确?
- git - git svn 克隆特定分支并合并
- javascript - java脚本alexa技能包数组问题
- javascript - 文件路径在 Safari 和 Chrome 中的处理方式不同?
- visual-studio-code - 将 vscode 扩展作为 npm 包使用
- sorting - 仅列级别的 ag-grid 排序比较器