LocalValidatorFactoryBean导致Spring MVC内部服务器错误

时间:2011-12-01 16:07:13

标签: hibernate spring model-view-controller bean-validation

我在Spring MVC项目中使用JSR-303 bean验证。当我在类路径上有一个JSR-303提供程序时,一切正常,并将所有其他验证设置保留为默认模式。我想在我的自定义验证器中使用spring managed beans,所以我将以下配置添加到org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean声明中:

<property name="jpaPropertyMap">
    <map>
        <entry key="javax.persistence.validation.factory" value-ref="validator" />
        </map>
</property>

当使用此配置时,似乎仍然使用@Valid注释的bean仍在MVC控制器中进行验证,但是代替MVC然后捕获验证失败并在表单上显示它们,会导致HTTP 500错误并且我从以下堆栈跟踪中获取Tomcat的:

javax.validation.ConstraintViolationException: Validation failed for classes [xxx.model.WebPage] during update time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=title, rootBeanClass=class xxx.model.WebPage, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'}
    ConstraintViolationImpl{interpolatedMessage='{SiteUnique.default}', propertyPath=urlAlias, rootBeanClass=class xxx.model.WebPage, messageTemplate='{SiteUnique.default}'}
]
    org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:161)
    org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreUpdate(BeanValidationEventListener.java:102)
    org.hibernate.action.EntityUpdateAction.preUpdate(EntityUpdateAction.java:237)
    org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:86)
    org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
    org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
    org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
    org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
    org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:64)
    org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1185)
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1261)
    org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246)
    xxx.model.constraints.SiteUniqueValidator.isValid(SiteUniqueValidator.java:97)
    org.hibernate.validator.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:278)
    org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:153)
    org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:117)
    org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:84)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:452)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:397)
    org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:361)
    org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:313)
    org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:139)
    org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:86)
    org.springframework.validation.DataBinder.validate(DataBinder.java:711)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:807)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    net.sf.ehcache.constructs.web.filter.CachingFilter.buildPage(CachingFilter.java:302)
    net.sf.ehcache.constructs.web.filter.SimpleCachingHeadersPageCachingFilter.buildPage(SimpleCachingHeadersPageCachingFilter.java:120)
    xxx.commons.filters.PageCachingFilter.buildPageInfo(PageCachingFilter.java:64)
    net.sf.ehcache.constructs.web.filter.CachingFilter.doFilter(CachingFilter.java:216)
    net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86)
    org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:74)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    xxx.commons.filters.HttpHeadFilter.doFilter(HttpHeadFilter.java:47)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

有没有人知道为什么Spring在设置javax.persistence.validation.factory属性时不会显示异常而无法处理验证错误?

0 个答案:

没有答案