首页 > 解决方案 > 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    ");
  }
}

标签: openapibean-validationopenapi-generator

解决方案


推荐阅读