Hibernate Validation各註解的用法Demo
阿新 • • 發佈:2019-02-13
- 依賴包
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.1.Final</version> </dependency> <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.el</artifactId> <version>2.2.4</version> </dependency>
與spring整合的配置:
<!-- 配置 JSR303 Bean Validator 定義 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
實體類屬性上加註解約束
@NotNull(message="書籍的姓名不能為空!")
public String getBookName() {
return bookName;
}
/** * 服務端引數有效性驗證 * @param object 驗證的實體物件 * @param groups 驗證組 * @return 驗證成功:返回true;嚴重失敗:將錯誤資訊新增到 flash message 中 */ @SuppressWarnings("rawtypes") public static void validateWithException(Validator validator, Object object, Class<?>... groups) throws ConstraintViolationException { Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups); if (!constraintViolations.isEmpty()) { StringBuffer sb=new StringBuffer(); for (ConstraintViolation constraintViolation : constraintViolations) { sb.append(constraintViolation.getMessage()); } throw new RuntimeException(sb.toString()); //throw new ConstraintViolationException(constraintViolations); } } 測試類方法: @Test public void testSaveBook(){ Book book=new Book(); book.setBookPrice(100); book.setBookStock(10); // book.setBookName("norelax"); validateWithException(validator, book); System.out.println(buyService.saveBook(10, null, 10)); }
測試結果: java.lang.RuntimeException: 書籍的姓名不能為空! at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497)
- Bean Validation 中內建的 constraint(約束)
- @Null 被註釋的元素必須為 null
- @NotNull 被註釋的元素必須不為 null
- @AssertTrue 被註釋的元素必須為 true
- @AssertFalse 被註釋的元素必須為 false
- @Min(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值
- @Max(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值
- @DecimalMin(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值
- @DecimalMax(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值
- @Size(max=, min=) 被註釋的元素的大小必須在指定的範圍內
- @Digits (integer, fraction) 被註釋的元素必須是一個數字,其值必須在可接受的範圍內
- @Past 被註釋的元素必須是一個過去的日期
- @Future 被註釋的元素必須是一個將來的日期
- @Pattern(regex=,flag=) 被註釋的元素必須符合指定的正則表示式
- Hibernate Validator 附加的 constraint
- @NotBlank(message =) 驗證字串非null,且長度必須大於0
- @Email 被註釋的元素必須是電子郵箱地址
- @Length(min=,max=) 被註釋的字串的大小必須在指定的範圍內
- @NotEmpty 被註釋的字串的必須非空
- @Range(min=,max=,message=) 被註釋的元素必須在合適的範圍內