本篇介紹Java Bean Validation Constraints 的 @Digits
的用法。
@Digits
可用來指定Java Bean屬性值的位數長度,應填的屬性為integer
及fraction
例如@Digits(integer = 3, fraction = 0)
表示屬性值的整數位數長度必須為3,小數位數為0。如果屬性值不符指定長度則違反限制。
使用前要匯入Java Validation API的jar,請參考Java 使用自訂的Java Bean Validation來驗證Bean屬性範例。
Customer.java
public class Customer {
private String custId;
@Digits(integer = 3, fraction = 0) // 整數位數3,小數位數0
private int int1;
@Digits(integer = 3, fraction = 0)
private String str1; // 數字為字串也OK
@Digits(integer = 1, fraction = 3) // 整數位數1,小數位數0
private double dou1;
// getter and setter ommitted
}
測試
public class Main {
public static void main(String[] args) {
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
Validator validator = vf.getValidator();
Customer customer = new Customer();
customer.setInt1(1000);
customer.setStr1("1000");
customer.setDou1(1.9999);
validate(validator, customer);
vf.close();
}
private static void validate(Validator validator, Customer customer) {
Set<ConstraintViolation<Customer>> violations = validator.validate(customer);
if (violations.isEmpty()) {
System.out.println("pass");
} else {
for (ConstraintViolation violation : violations) {
System.out.println(
"violation field:" + violation.getPropertyPath()
+ "=" + violation.getInvalidValue()
+ ", message:" + violation.getMessage());
}
throw new ConstraintViolationException(violations);
}
}
}
結果如下
violation field:str1=1000, message:numeric value out of bounds (<3 digits>.<0 digits> expected)
violation field:dou1=1.9999, message:numeric value out of bounds (<1 digits>.<3 digits> expected)
violation field:int1=1000, message:numeric value out of bounds (<3 digits>.<0 digits> expected)
Exception in thread "main" javax.validation.ConstraintViolationException: str1: numeric value out of bounds (<3 digits>.<0 digits> expected), dou1: numeric value out of bounds (<1 digits>.<3 digits> expected), int1: numeric value out of bounds (<3 digits>.<0 digits> expected)
at idv.matt.main.Main.validate(Main.java:62)
at idv.matt.main.Main.main(Main.java:39)
參考:
沒有留言:
張貼留言