Sri*_*har 8 java codegen openapi openapi-generator
我的 openapi 合约中有以下模式定义来表示commission amount。
commissionAmount:
type: number
minimum: -99999.99
maximum: 99999.99
Run Code Online (Sandbox Code Playgroud)
生成的代码:
@Valid
@DecimalMin("-99999.99") @DecimalMax("99999.99")
public BigDecimal getCommissionAmount() {
return commAmt;
}
Run Code Online (Sandbox Code Playgroud)
生成的代码很好并且符合预期。我只是想知道这些-99999.99以及和99999.99的有效值。minimummaximum
提出这个问题的原因是它没有检查小数部分的限制。例如,我期望12345.678is invalid ,12345.67is valid 。但它将两者标记为有效。
I read@Digits用于检查整数和小数部分的位数限制。我如何告诉也openapi-generator-maven-plugin进行注释?Digits
预期生成的代码:
@Valid
@Digits(integer = 5, fraction = 2)
@DecimalMin("-99999.99") @DecimalMax("99999.99")
public BigDecimal getCommissionAmount() {
return commAmt;
}
Run Code Online (Sandbox Code Playgroud)
在 OpenAPI 中指定这一点的方法是使用multipleOf:
commissionAmount:
type: number
minimum: -99999.99
maximum: 99999.99
multipleOf: 0.01
Run Code Online (Sandbox Code Playgroud)
但是,使用 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();
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以分叉生成器并将新注释添加到模板中:https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/main/resources/Java/ beanValidationCore.mustache
像这样的一行:
{{#multipleOf}}@MultipleOf({{multipleOf}}){{/multipleOf}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15797 次 |
| 最近记录: |