2016-12-05 4 views
0

Hibernate Validator을 사용하여 요청 개체의 유효성을 검사하려고합니다.유효성 검사 그룹을 기반으로 동일한 필드에서 다른 유효성 검사

간단한 예제로, 유효성을 검사하려는 객체의 클래스가 필드 인 경우 BString name 필드를 가진 다른 클래스입니다.

그 이유 때문에 사용자 정의 MyValidator implements ConstraintValidator 클래스에 연결된 사용자 정의 Constraint Annotations을 구현했습니다.

DTO 클래스

@AclassValidate(groups = {Operations.Insert.class, Operations.Update.class javax.validation.groups.Default.class}) 
public class A { 

    @BclassValidate(groups = {Operations.Insert.class, Operations.Update.class}) 
    private B bObj; 

    // setters, getters 
} 

의 엔드 포인트 메소드 서명 (유효성 검사기가 호출됩니다, 활성 그룹 설정) :

@PostMapping("/test") 
public A createA(
     @Validated(value = Operations.Insert.class) 
     // @Validated(value = Operations.Update.class) 
     @RequestBody A a 
) 

내 Validator 클래스

public class BclassValidator implements ConstraintValidator<BclassValidate, B> { 

    public void initialize(BclassValidate constraintAnnotation) { 
    } 

    public boolean isValid(B b, ConstraintValidatorContext constraintContext) { 

     boolean valid = true; 

     // Get active group here 
     activeGroup = ..? 
     if (activeGroup == Operations.Insert.class) { 
      // check if b.getName() equals to "John" 
     } 
     else if (activeGroup == Operations.Update.class) { 
      // check if b.getName() equals to "Doe" 
     } 

     return valid; 
    } 
} 

내가 달성하고자하는 것은 활성 그룹을 기반으로 동일한 필드에 대해 다른 유효성 검사를 적용하는 것입니다. 활성 그룹은 @Validated 주석으로 설정된 그룹입니다. 질문은 값에 따라 다른 유효성 검사를 적용하기 위해 활성 그룹을 어떻게 검색 할 수 있습니까?

답변

0

제한 유효성 검사기 내에서 현재 유효성이 검사 된 그룹을 유지할 수 없습니다.

대신 제약 조건을 여러 항목으로 나눠야합니다. 하나는 삽입 용이고 다른 하나는 업데이트 용입니다. 그런 다음 이러한 개별 제약 조건을 하나의 유효성 검사 그룹에 각각 할당 할 수 있습니다.