1. 程式人生 > >Hibernate Validation各註解的用法Demo

Hibernate Validation各註解的用法Demo

  1. 依賴包
    <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)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)     at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)     at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)     at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232)     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)     at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)     at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)     at org.junit.runners.ParentRunner.run(ParentRunner.java:309)     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175)     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:670)     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
  1. Bean Validation 中內建的 constraint(約束)  
  2. @Null   被註釋的元素必須為 null  
  3. @NotNull    被註釋的元素必須不為 null  
  4. @AssertTrue     被註釋的元素必須為 true  
  5. @AssertFalse    被註釋的元素必須為 false  
  6. @Min(value)     被註釋的元素必須是一個數字,其值必須大於等於指定的最小值  
  7. @Max(value)     被註釋的元素必須是一個數字,其值必須小於等於指定的最大值  
  8. @DecimalMin(value)  被註釋的元素必須是一個數字,其值必須大於等於指定的最小值  
  9. @DecimalMax(value)  被註釋的元素必須是一個數字,其值必須小於等於指定的最大值  
  10. @Size(max=, min=)   被註釋的元素的大小必須在指定的範圍內  
  11. @Digits (integer, fraction)     被註釋的元素必須是一個數字,其值必須在可接受的範圍內  
  12. @Past   被註釋的元素必須是一個過去的日期  
  13. @Future     被註釋的元素必須是一個將來的日期  
  14. @Pattern(regex=,flag=)  被註釋的元素必須符合指定的正則表示式  
  15. Hibernate Validator 附加的 constraint  
  16. @NotBlank(message =)   驗證字串非null,且長度必須大於0  
  17. @Email  被註釋的元素必須是電子郵箱地址  
  18. @Length(min=,max=)  被註釋的字串的大小必須在指定的範圍內  
  19. @NotEmpty   被註釋的字串的必須非空  
  20. @Range(min=,max=,message=)  被註釋的元素必須在合適的範圍內