在WebSphere上使用Spring(MVC)进行JSR 303验证
我正在尝试使用WAS 8.5.5.12 Full Profile中的Spring MVC Controller进行JSR 303 Bean验证。
我只验证一个@RequestParam,而不验证一个完整的bean:
@RequestMapping(method=RequestMethod.GET)public String initializeCheckIn(
@Valid @Pattern(regexp = "^[\\p{Alnum}]*$")
@RequestParam("officeid") String officeId, HttpSession session, Model model) {
在添加一些特定于Spring的配置之前,没有进行任何验证,但是也没有任何错误。据推测,根本没有尝试进行验证。
现在,我已经添加了必需的@Validated类注释和bean定义:
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>
我收到以下错误:
[8/9/17 10:33:40:588 CDT] 000000a7 ServletWrappe E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0014E: Uncaught service() exception root cause Spring MVC Dispatcher: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org.hibernate.validator.method.MethodConstraintViolationException...
Caused by: java.lang.NoClassDefFoundError: org.hibernate.validator.method.MethodConstraintViolationException
at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:152)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
at my.package.web.CheckInController$$EnhancerBySpringCGLIB$$d385737c.initializeCheckIn(<generated>)
基于
http://docs.spring.io/spring/docs/current/javadoc-
api/org/springframework/validation/beanvalidation/MethodValidationPostProcessor.html
Spring应该自动检测可用的JSR-303提供程序,该版本的WebSphere(8.5.5.12完整概要文件)应该具有该提供程序。似乎找不到该JSR-303提供程序,因此它已恢复为默认设置。
那么,为什么找不到WebSphere版本或如何找到它的任何想法呢?
回答:
我想我终于找到了可行的解决方案。看来我需要显式地告诉Spring
MethodValidationPostProcessor
bean使用容器提供的容器javax.validation.ValidatorFactory
,显然可以从JNDI查找“
java:comp /
ValidatorFactory”中获得。
<jee:jndi-lookup id="validatorFactory" jndi-name="java:comp/ValidatorFactory" resource-ref="false"/><bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
<property name="validatorFactory" ref="validatorFactory"/>
</bean>
(顺便说一句,基于此简单的JNDI查找JSP,在此版本的WebSphere中,实现类为org.apache.bval.jsr303.ApacheValidatorFactory
)
编辑:我在博客条目上写下了整个过程:https://dougbreaux.github.io/2018/05/23/springmvc-
jsr303-websphere.html
以上是 在WebSphere上使用Spring(MVC)进行JSR 303验证 的全部内容, 来源链接: utcz.com/qa/407679.html