2013-07-20 1 views
0

유효성 검사가 실패 할 때 유효성 검사기가 메시지를 지정할 수있는 방법이 있습니까? 나는이 (아마도 value에 대한 열거 대신 문자열을 사용하는 것이 실제로)처럼 그것을 사용할 수 있도록 내가 주석을 구현할 수 있습니다 알고맞춤형 Bean 검사기 - JSR303/JSR349 Validator는 유효하지 않은 메시지를 선택할 수 있습니까?

@Check(value="Type1", message="{type1.checkFailed}") public MyClass myVal1; 
@Check(value="Type2", message="{type2.checkFailed}") public MyClass myVal2; 

그리고 내가 원하는 최종 결과를 얻을 것이다. 사용할지 여부를 결정합니다 내가하고 싶은 무엇

@CheckType1 public MyClass myVal1; // default message is type1.checkFailed 
@CheckType2 public MyClass myVal2; // default message is type2.checkFailed 

@Check과 관련된 검증을 할 수있다 : 나는 또한 여러 주석/유효성 검사기를 구현하고 이런 식을하고 주석의 정의에 기본 메시지를 지정할 수 있습니다 이 같은 value에 따라 메시지로 type1.checkFailed 또는 type2.checkFailed은 :

@Check("Type1") public MyClass myVal1; 
@Check("Type2") public MyClass myVal2; 

가장 좋은 방법은 하나의 특성에 초점을 맞춘 유효성을 유지하는 것이 나의 이해이다. 그러나 나는 하나의 특성에 대한 검증이기 때문에 내가하려는 것은 이것에 반하는 것이라고 생각하지 않는다. 유효성을 검증 할 수있는 변형이있다. 예를 들어

사용하여 개 품종 : 주어진 주석 만 (적어도 SE7의 등) 요소에 한 번만 나타날 수 있기 때문에

@BreedSize("Large") Dog bigDog; 
@BreedSize("Small") Dog smallDog; 

,이 또한 여러 가지의 일을 보장하는 합리적인 방법이 될 수있다 상호 배타적 인 검증이 이루어집니다. 요소에 같은 유형의 여러 주석에 대한 제안이 있다고 생각하지만 유효성 검사기에서 하나만 제공되었는지 확인할 수 있다고 가정합니다.

이것이 가능합니까?

답변

0

이 같은 isValid() 메서드에 전달 ConstraintValidatorContext를 통해 사용자 정의 제약 조건 위반 개체를 만들 수 있습니다

public class BreedSizeValidator implements ConstraintValidator<BreedSize, Dog> { 

    private String value; 

    @Override 
    public void initialize(BreedSize constraintAnnotation) { 
     this.value = constraintAnnotation.value(); 
    } 

    @Override 
    public boolean isValid(
     Dog object, 
     ConstraintValidatorContext constraintContext) { 

     if (object == null) { 
      return true; 
     } 

     boolean isValid = ...; 

     if (!isValid) { 
      String messageKey = "Large".equals(value) ? 
       "{BreedSize.Large.message}" : "{BreedSize.Small.message}"; 

      constraintContext.disableDefaultConstraintViolation(); 
      constraintContext 
       .buildConstraintViolationWithTemplate(messageKey) 
       .addConstraintViolation(); 
     } 

     return isValid; 
    } 
} 
+0

큰 작품! 감사. – CraftWeaver