2009-10-02 3 views
6

나는 봄 3.0 문서의 섹션 5.7.4.3 설명처럼 내 웹 응용 프로그램에 대해 검증을 구현하는 시도 : 나는대로 최대 절전 모드 - 유효성 검사기를 추가 한봄 JSR303 유효성 검사 봄 문서에 설명 된 것처럼 작동하지 않습니다

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="validator"> 
       <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
      </property> 
     </bean> 
    </property> 
</bean> 

의존성 모든 것이 OK 보이지만, 다음과 같은 오류 내 웹 응용 프로그램의 결과 시작 :

org.springframework.beans.NotWritablePropertyException: 
Invalid property 'validator' of bean class 
[org.springframework.web.bind.support.ConfigurableWebBindingInitializer]: 
Bean property 'validator' is not writable or has an invalid setter method. 
Does the parameter type of the setter match the return type of the getter? 

것은 뭔가 잘못 꽤 분명 API를 찾고입니다. LocalValidatorFactoryBeanjavax.validation.Validator을 구현하고 ConfigurableWebBindingInitializer.setValidator()org.springframework.validation.Validator을 예상합니다.

이 문제에 대한 해결책은 없습니까?

이 소개 LocalValidatorFactoryBean 편집 :

This is the central class for javax.validation (JSR-303) setup in a Spring application context: It bootstraps a javax.validation.ValidationFactory and exposes it through the Spring Validator interface as well as through the JSR-303 Validator interface and the ValidatorFactory interface itself.

알렉스 마샬처럼이 아래 언급은 하지 경우입니다. LocalValidatorFactoryBeanjavax.validation.Validator 만 구현합니다.

LocalValidatorFactoryBeanSpringValidatorAdapter을 확장하지만, org.springframework.validation.Validator을 구현합니다.

+0

또한 'hibernate-core-3.5.0.Beta-1'로 업데이트하려고했지만 Spring의 Hibernate 코드는이 버전과 호환되지 않습니다. – Koraktor

+1

http://jira.springframework.org/browse/SPR-6189에서 JIRA 문제를 열었습니다. – Koraktor

답변

6

에서 자신의 JIRA의 이슈 트래커에서 이에 대한 문제를 만들어야합니다

위의 질문에 대한 validator 빈 구성을 사용하면 유효성 검사를 사용하여 각 컨트롤러에 다음 코드를 추가해야합니다.

@Autowired 
private javax.validation.Validator validator; 

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator((org.springframework.validation.Validator) this.validator); 
} 

그것은 더러운하지만 LocalValidatorFactoryBeanSpringValidatorAdapter를 확장하고이 org.springframework.validation.Validator를 구현하기 때문에 작동합니다.

4

Javadocs for ConfigurableWebBindingInitializer에서 'validator'속성의 유형은 'org.springframework.validation.Validator'입니다. 그런 다음 Javadocs for LocalValidatorFactoryBean을 보면, 실제로 (org.springframework.validation.Validator를 생성하기 위해) FactoryBean을 구현하지 않았거나 org.springframework.validation.Validator 자체를 구현하지 않았 음을 알 수 있습니다. ConfigurableWebBindingInitializer의 'validator'속성을 제공하는 것은 오류로 표시된 것과 같이 잘못된 유형입니다. 다음은이 문제에 대한 해결의 난이 봄 개발자의 부분에 (? 총) 감독 의심, 당신은 jira.springframework.org

+0

그래서 내 첫 번째 혐의가 옳았다. 그 점을 확인해 주셔서 감사합니다. 나는 버그를 제기하려고 노력할 것이다. – Koraktor

+1

스프링 3이 아직 테스트 중이라는 사실을 감안할 때 부당한 감독이라고 부르는 것은 불공정합니다. – skaffman