验证给定长度的BigDecimal的大小,而不是精度

时间:2017-11-03 05:19:19

标签: java bean-validation jsr

我需要使用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;

2 个答案:

答案 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

http://www.c-sharpcorner.com/UploadFile/5fd9bd/javax-annotation-and-hibernate-validator-a-pragmatic-appro/

答案 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