我需要使用JSR验证器验证BigDecimal对象的长度。它最多应包含10个字符。
Some valid examples:
123456789.0
12345.67890
12345.67
1.2345
Invalid examples:
123456789.0123
123.32131232
如何使用注释实现此目的?根据JSR文档,@Size注释是针对String对象的。
@Size(max = 10)
@Column(name = "totalPrice")
private BigDecimal totalPrice;
答案 0 :(得分:0)
你可以尝试
' @Digits(integer =,fraction =)或@DecimalMax(value =" 9999999999.999",message ="十进制值不能超过9999999999.999&#34 ;)'
这两者都应该有用。
如果您想知道如何使用这些,请使用以下网址
表示@digit
https://www.owasp.org/index.php/Bean_Validation_Cheat_Sheet
表示@decimalmax
答案 1 :(得分:0)
需要自定义约束。这可以大致如下:
注释:
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { BigDecimalLengthValidator.class})
public @interface BigDecimalLength {
int maxLength();
String message() default "Length must be less or equal to {maxLength}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
ConstraintValidator:
public class BigDecimalLengthValidator implements ConstraintValidator<BigDecimalLength, BigDecimal> {
private int max;
@Override
public boolean isValid(BigDecimal value, ConstraintValidatorContext context) {
return value == null || value.toString().length() <= max;
}
@Override
public void initialize(BigDecimalLength constraintAnnotation) {
this.max = constraintAnnotation.maxLength();
}
}
用法:
@BigDecimalLength(maxLength = 3)
private BigDecimal totalPrice;
这应该满足基本需求,进一步调整(属性文件中的消息等),请检查Creating custom constraints。