当前位置: 首页 > 面试题库 >

在WebSphere上使用Spring(MVC)进行JSR 303验证

皇甫学海
2023-03-14
问题内容

我正在尝试使用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



 类似资料:
  • 在添加Spring特定的配置之前,没有进行任何验证,但也没有任何错误。可能根本没有尝试验证。 现在我已经添加了必要的@Validated类注释和bean定义: 我得到以下错误:

  • 我已经混合了斯卡拉-Java spring-引导mvc项目。我试图使用 实现请求bean的自定义验证器,我从这里和其他线程中了解到,用Java编写注释更好,scala支持JSR-303验证吗? 我用Java编写了自定义约束注释,用scala编写了ConstraintValidator类,但当我指定@Constraint(validatedBy=ScalacustomerValidator.clas

  • 我正在尝试使与和一起工作。我试着按照spring-boot-sample-secure和spring-boot-sample-web-secure中的指南去做,但是我没有让它起作用。 我正在尝试构建一个没有任何ui交互的REST应用程序。因此,我发现这两个样品都不完全适合我的目的。目前我的解决方案是使用AOP。 解决方案对我有效。然而,我想知道这是否是一个好的解决方案。我很好奇是否有更好的解决办法

  • 问题内容: 我很难在MVC3上进行验证。当我直接加载页面时,它工作正常,但是当我使用jquery AJAX POST时,它无法验证: 使用加载此表单,这是呈现的HTML: 通过拦截表单/提交来使用AJAX POST。帖子完成后,将弹出并关闭模式对话框。我想在发送帖子之前验证表格: 我这样做是否破坏了某些东西? 始终返回true。 我的web.config具有: 我的页面来源有: 我的模型有: 经过

  • 实际上,我们正在开发一个应用程序,在Spring boot 1.5中,通过oauth2实现的Spring security完成身份验证和授权,现在我们有一个要求,在身份验证部分,拆分身份验证,并将身份验证部分转移到第三方,即SAML集成, 流程:登录- 如何在my spring security中仅使用userid授权用户,并生成自定义令牌(自定义任何spring security筛选器), 如何

  • 我从http://docs.spring.io/spring-data/rest/docs/2.1.2.release/reference/html/validation-chapter.html文档中了解到,我可以声明带有某些前缀的验证器。 我使用的是JSR303,所以我的域实体是用验证注释来注释的。 我能在Spring Data REST中使用JSR303 Bean验证吗?如果是,如何使用?

  • 我研究了各种输入验证框架,包括用于JSR303 bean验证的Hibernate Validator impl,以及ESAPI Validator接口及其DefaultValidator实现。 ESAPI输入验证围绕通过ESAPI.properties文件进行的regex模式匹配。 ESAPI路由: esapi.properties: Java班: Hibernate验证器/spring MVC路

  • 我正在做一个非常依赖KendoUI的项目。 业务需求要求我使用KendoUI表单元素与MVC验证。 这对于标准文本框元素很好,但是当我被要求使用Kendo DropDownList widges时,我遇到了MVC验证显示的问题。 我的剑道DDL: 生成的输出: 如果仔细查看从KendoUI生成的隐藏输入,可以看到MVC验证正在向其中添加验证错误,而不是下拉列表。 输入验证错误" 验证工作正常,但是