在 Swagger CodeGen 中,如何指定带小数位的字段最大值?

问题描述 投票:0回答:3

我们使用 Java 11 和以下版本的 Swagger Codegen

        <plugin>
            <groupId>io.swagger.codegen.v3</groupId>
            <artifactId>swagger-codegen-maven-plugin</artifactId>
            <version>3.0.35</version>

我的 OpenAPI 3 规范中针对特定 DTO 字段有此内容,

    amount:
      type: number
      format: double
      maximum: 99999999.99
      multipleOf: 0.01

运行插件后,生成的 DTO 不带小数位

  /**
   * Get amount
   * maximum: 99999999
   * @return amount
  **/
  @Schema(required = true, description = "")
  @NotNull

   @DecimalMax("99999999")   public Double getAmount() {
    return amount;
  }

因此,当我提交列出的最大值 99999999.99 时,我收到此错误

"errorMessage": "must be less than or equal to 99999999"

openAPI 规范和 Swagger 代码生成中拥有最大字段并随后包含小数位的正确方法是什么?

openapi java-11 swagger-codegen swagger-codegen-maven-plugin
3个回答
0
投票

你能试试这个吗?

amount:
  type: number
  format: double
  exclusiveMaximum: 100000000
  multipleOf: 0.01

0
投票

尝试基于双精度格式(我知道 DTO 不会生成小数),将其添加到 pom.xml 中的 swagger-codegen-maven-plugin 配置中:

<configuration>
   <typeMappings>
     <typeMapping>Double=java.math.BigDecimal</typeMapping>
   </typeMappings>
</configuration>

0
投票

[SwaggerV3] 这段代码就是这样做的。 默认CodegenConfing.java

他们将最小值和最大值视为长值。

您可以修改和创建您自己的版本或扩展它以创建您自己的生成器。 那么你需要类似的东西:

 @Override
protected void processPropertySchemaTypes(String name, CodegenProperty codegenProperty, Schema propertySchema) {
    super.processPropertySchemaTypes(name, codegenProperty, propertySchema);
    reprocessNumberMinAndMax(propertySchema, codegenProperty);
}

private void reprocessNumberMinAndMax(Schema propertySchema, CodegenProperty codegenProperty){
    if (propertySchema instanceof NumberSchema) {
        if (propertySchema.getMinimum() != null) {
            codegenProperty.minimum = String.valueOf(propertySchema.getMinimum());
        }
        if (propertySchema.getMaximum() != null) {
            codegenProperty.maximum = String.valueOf(propertySchema.getMaximum());
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.