2017-11-03 2 views
-3

私は、のJSRバリデータを使用して、の長さを検証します。最大10文字を含める必要があります。正確なサイズではなく、指定された長さのBigDecimalの検証サイズ

Some valid examples: 
123456789.0 
12345.67890 
12345.67 
1.2345 

Invalid examples: 
123456789.
123.32131232 

注釈を使用してこれを行うにはどうすればよいですか? @Sizeアノテーションの後には、JSRのドキュメントに従ってStringオブジェクトがあります。

@Size(max = 10) 
@Column(name = "totalPrice") 
private BigDecimal totalPrice; 
+0

最大10文字***ですか? 'bd.toString()。length()<= 10' – Andreas

+0

JSRアノテーションを使って検証します。そのようにはなりません –

+1

独自のカスタム制約、つまり独自のアノテーションと独自の 'ConstraintValidator'実装を実装します。 – Andreas

答えて

0

あなたは

試すことができます '(メッセージ= "小数点値を超える9999999999.999することはできません"、値= "9999999999.999")@Digits(整数=、分数=)または@DecimalMax' を

これはどちらもうまくいくはずです。

あなたはこれらを使用する方法を知りたい場合は、その後、

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/

0

ため@digitについては、以下のURL

を一緒に行きます必要です。

注釈:

@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にチェックしてください。

関連する問題