2012-05-10 4 views
2

아래의 테스트 사례가 있는데 질문이 있습니다. 왜 groups 매개 변수없이 중첩 된 속성의 유효성 검사가 항상 실패합니까? 그룹이없는 중첩 된 속성의 유효성 검사를 어떻게 수행 할 수 있습니까?Hibernate Validator - 중첩 된 속성의 유효성 확인

package validation; 
    import java.util.Set; 
    import javax.validation.*; 
    import javax.validation.constraints.*; 
    import junit.framework.Assert; 
    import lombok.Data; 
    import lombok.extern.slf4j.Slf4j; 
    import org.junit.*; 

    @Slf4j 
    public class NestedPropertiesTest { 

     private ValidatorFactory factory; 
     private Validator validator; 

     @Before 
     public void setUp() throws Exception { 
      log.info("\n\nTest start:"); 
      this.factory = Validation.buildDefaultValidatorFactory(); 
      this.validator = factory.getValidator(); 
     } 

     @Test 
     public void testNestedBarNullValue() { 
      Foo foo = new Foo(); 
      Bar bar = new Bar(); 
      bar.setNotempty(null); 
      foo.setBar(bar); 
      log.info("With groups:"); 
      Set<ConstraintViolation<Foo>> errors = validator.validateProperty(foo, "bar.notempty", Checks.class); 
      logErrors(errors); 
      Assert.assertFalse(errors.isEmpty()); 
      log.info("Without groups:"); 
      errors = validator.validateProperty(foo, "bar.notempty"); 
      logErrors(errors); 
      Assert.assertFalse(errors.isEmpty()); 
     } 

     @Test 
     public void testNestedBarMinSize() { 
      Foo foo = new Foo(); 
      Bar bar = new Bar(); 
      bar.setNotempty("1"); 
      foo.setBar(bar); 
      log.info("With groups:"); 
      Set<ConstraintViolation<Foo>> errors = validator.validateProperty(foo, "bar.notempty", Checks.class); 
      logErrors(errors); 
      Assert.assertFalse(errors.isEmpty()); 
      log.info("Without groups:"); 
      errors = validator.validateProperty(foo, "bar.notempty"); 
      logErrors(errors); 
      Assert.assertFalse(errors.isEmpty()); 
     } 

     @SuppressWarnings("rawtypes") 
     private void logErrors(Set errors) { 
      log.info("Nr. of validation errors: {}", errors.size()); 
      for (Object error : errors) { 
       ConstraintViolation cv = (ConstraintViolation) error; 
       log.info("{}: {}", cv.getPropertyPath(), cv.getMessage()); 
      } 
     } 

     @Data private class Foo { 
      @Valid private Bar bar; 
     } 
     @Data private class Bar { 
      @NotNull(groups=Checks.class) 
      @Size(min = 2, groups=Checks.class) 
      private String notempty; 
     } 
     private interface Checks {} 
    } 

(단지 경우) 내 치어 :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 
     <groupId>noorg</groupId> 
     <artifactId>validation</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 

     <dependencies> 
      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-validator</artifactId> 
       <version>4.2.0.Final</version> 
      </dependency> 
      <dependency> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
       <version>4.10</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.projectlombok</groupId> 
       <artifactId>lombok</artifactId> 
       <version>0.11.0</version> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-simple</artifactId> 
       <version>1.6.4</version> 
      </dependency> 
     </dependencies> 
    </project> 
종류가

기독교

내 테스트 케이스에 관하여

사전에

들으 0

답변

5

그룹을 지정하면 제약 조건이 암시 적으로 기본 그룹의 일부가 아닙니다. 주석을 여전히 기본 그룹에 포함 시키려면 해당 주석을 지정해야합니다.

@Data private class Bar { 
     @NotNull(groups={Checks.class, javax.validation.groups.Default.class}) 
     @Size(min = 2, groups={Checks.class, javax.validation.groups.Default.class}) 
     private String notempty; 
    } 
+0

Thx, 많이 설명합니다. – Christian

관련 문제