在 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
使用以下注释和验证器:
@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;
}
}
然后,您可以分叉生成器并将新注释添加到模板中:https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/main/resources/Java/beanValidationCore.mustache
像这样的一行:
{{#multipleOf}}@MultipleOf({{multipleOf}}){{/multipleOf}}