2014-01-16 1 views
1

스프링 필드에서 유효성을 검사하기 위해 JSR-303을 사용하고 있습니다. 내 모든 유효성 검사 논리를 한 클래스에 넣고 그에 따라 각 오류에 대한 메시지를 표시하고 싶습니다. 이것이 가능한가? 각 유효성 검사 (예 : PasswordLengthValidator, PasswordRegexValidator)에 대해 별도의 클래스를 만드는 것이 더 나은 방법입니까?스프링 MVC 유효성 검사 : 각 유효성 검사에 대해 특정 오류 메시지 설정

현재 암호 인터페이스를 기반으로 한 오류 메시지 만 표시 할 수 있습니다. 여기

@Documented 
@Constraint(validatedBy = PasswordValidator.class) 
@Target({ ElementType.METHOD, ElementType.FIELD }) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Password { 

    String message() default "{Password}"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 

} 

내 유효성 검사기 클래스입니다 : 여기

는 @Password 주석에 대한 내 인터페이스입니다

public class PasswordValidator implements ConstraintValidator<Password, String> { 

    public void initialize(Password arg0) { 
     // TODO Auto-generated method stub 

    } 

    public boolean isValid(String field, ConstraintValidatorContext ctx) { 
     // TODO validation validation validation 
     if(StringUtils.isEmpty(field)) { 
      // Message: password can not be empty 
      return false; 
     } 

     // match some password regex 
     if(field.matches("^(?=.*[A-Z].*[A-Z])(?=.*[[email protected]#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$")) { 
      // Message: password should be bla bla 
      return false; 
     } 

     return true; 
    } 

} 

답변

1

ConstraintValidatorContext API와 검증 메시지를 보낼 수 있습니다 귀하의 유효성 검사기 :

context.buildConstraintViolationWithTemplate("this detail is wrong") 
     .addConstraintViolation(); 

// [..] 

context.buildConstraintViolationWithTemplate("that detail is wrong") 
     .addPropertyNode("street") 
     .addConstraintViolation();