gpt4 book ai didi

java - openapi 3.0 有效的最小值和最大值

转载 作者:行者123 更新时间:2023-12-04 04:15:19 26 4
gpt4 key购买 nike

我有以下模式定义来表示 commission amount在我的 openapi 契约(Contract)中。

commissionAmount:
type: number
minimum: -99999.99
maximum: 99999.99

生成的代码:
@Valid
@DecimalMin("-99999.99") @DecimalMax("99999.99")
public BigDecimal getCommissionAmount() {
return commAmt;
}

生成的代码很好,符合预期。我只是想知道这些是 -99999.9999999.99 minimum 的有效值和 maximum .

问这个问题的原因是它没有检查小数部分的限制。例如,我希望 12345.678无效, 12345.67已验证。但它将两者都标记为有效。

我读了 @Digits用于检查整数和小数部分的位数限制。我怎么告诉 openapi-generator-maven-plugin批注 Digits还有?

预期生成的代码:
@Valid
@Digits(integer = 5, fraction = 2)
@DecimalMin("-99999.99") @DecimalMax("99999.99")
public BigDecimal getCommissionAmount() {
return commAmt;
}

最佳答案

在 OpenAPI 中指定它的方法是使用 multipleOf :

commissionAmount:
type: number
minimum: -99999.99
maximum: 99999.99
multipleOf: 0.01

但是,使用 OpenAPI 生成器 不会产生注释 为了这。原因是没有 javax.validation可以表示的注解 multipleOf有效地(想象一下试图表达 multipleOf: 0.02 - @Digits 是不够的)。

但是,您可以创建自己的注释,因为该用户具有: https://github.com/OpenAPITools/openapi-generator/issues/2192#issuecomment-575132233

使用以下注释和 validator :

@Target({METHOD, FIELD})
@Retention(RUNTIME)
@Repeatable(MultipleOf.List.class)
@Constraint(validatedBy = MultipleOfValidator.class)
public @interface MultipleOf {

double value();

String message() default "{error.multipleOf}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default { };

@Target({ METHOD, FIELD })
@Retention(RUNTIME)
@Documented
@interface List {
MultipleOf[] value();
}

}

public class MultipleOfValidator implements ConstraintValidator<MultipleOf, Number> {

private double value;

@Override
public void initialize(MultipleOf constraintAnnotation) {
this.value = constraintAnnotation.value();
}

@Override
public boolean isValid(Number value, ConstraintValidatorContext context) {
return (value == null) || (value.doubleValue() / this.value) % 1 == 0;
}

}

然后你就可以 fork 生成器并将你的新注释添加到模板中: https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/main/resources/Java/beanValidationCore.mustache

像这样的一行:
{{#multipleOf}}@MultipleOf({{multipleOf}}){{/multipleOf}}

关于java - openapi 3.0 有效的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60808674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com