2012-10-31 5 views
1

우리 코드에서는 validation (Object target, Errors 오류)를 재정의하고 org.springframework.validation.beanvalidation.LocalValidatorFactoryBean에 대한 하위 클래스를 구현하여 유효성 검사를 실행하고 추가 처리 오류 메시지를 등록하십시오.Spring의 LocalValidatorFactoryBean을 서브 클래 싱하는 다른 방법

3.0에서 3.1으로 업그레이드하면이 메서드는 더 이상 호출되지 않습니다. 동료가 스프링 코드를 디버그하여 signature validate (Object target, Errors errors, Object ... validationHints) 메서드가 대신 호출되고 이전 validate()가 단순히 건너 뛴 것처럼 보인 것으로 나타났습니다. validationHints 메서드를 사용하도록 변경하면 다시 작동합니다.

이 픽스는 기묘하고 미래의 혼란에 빠지기 쉽습니다. 보다 미래 지향적 인 검증을 처리 할 수있는 또 다른 방법이 있습니까?

+0

@valid 주석은 동일한 rt입니까? – shazinltc

+0

우리는 유효성을 검사해야하는 양식 부분을 표시하기 위해 주석을 사용하고 있습니다. 그러나 우리는 우리 자신의 추가 유효성 검사 처리를 추가하려고합니다. 이것이 우리가 LocalValidatorFactoryBean을 서브 클래 싱하는 이유입니다. –

+0

동일한 문제가 있습니다. http://forum.springsource.org/showthread.php?134759-Extending-JSR-303-validation-quot-validate-quot-is-not-invoked-by-Valid-annotation 해결책을 선택 했습니까? –

답변

4

우리 프로젝트에서 우리는 약간 다른 접근 방식을 취했습니다. 우리는 또한 Spring 3.1을 사용하고 있으며 검증과 사용자 정의 유효성 검증을 사용하여 주석이 추가 된 bean이 있습니다. 우리의 접근 방식은 시나리오에 적용될 수도 있고 적용되지 않을 수도 있습니다. Spring 3.1로 이전하기 전에 원래 사용했던 방법을 잘 모르기 때문입니다.

사용자 정의 유효성 검사가 필요한 경우 LocalValidatorFactoryBean을 확장하는 대신 org.springframework.validation.Validator 클래스를 구현합니다. 따라서이 구현은 고유 한 사용자 정의 코드를 실행하고 Spring의 기본 유효성 검사를 호출합니다.이 유효성 검사는 사용자 정의 유효성 검사기에 자동으로 주입되는 bean을 통해 노출됩니다. 여기에 검증 코드 :

@Component("myValidator") 
public class MyValidator implements Validator { 

@Autowired 
private Validator springValidator; 

@Override 
public boolean supports(Class<?> clazz) { 
    return MyObject.class.isAssignableFrom(clazz); 
} 

@Override 
public void validate(Object object, Errors errors) { 
    MyObject myObject = (MyObject) object; 

    // invoke spring default validator so validation annotations are processed 
    springValidator.validate(myObject, errors); 

    // custom validation 
    .... 

는 그리고 우리는 다음과 같은 빈은 우리의 스프링 XML 파일에서 선언 한 :

위의 구현
<bean id="springValidator" 
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

, 검증을 호출하는 데 필요한 클래스를 호출하여 그렇게 할 것이다 validator.validate (Object 객체, 오류 오류). 다시 말하자면, 이것은 동일한 유효성 검사 (Object, Errors) 메소드를 사용하고 있는지 확신 할 수 없기 때문에 프로젝트에서 취한 접근법이 자신에게 적용되는지 확신 할 수없는 이유입니다.

어쨌든 도움이되기를 바랍니다.

+0

건배, 내가 한번 봐봐 내가 이걸 시험해 볼 수있을 때까지 조금 일지 모른다. 필자는 Validator 인터페이스의 validate 메소드를 사용하기 전에 (당신과 같거나 하나의 서브 클래스 또는 두 라인 아래로) 사용했다는 것을 보았습니다. 현재 여기에서 작동하는 다른 validator 메소드는 SmartValidator에서옵니다. –

관련 문제