在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

MethodValidationPostProcessorbean使用容器提供的容器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

回到顶部