当前位置: 首页 > 知识库问答 >
问题:

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

邢焱
2023-03-14
@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>)

共有1个答案

周越泽
2023-03-14

首先,您必须强制使用附带的Hibernate Validator5,而不是WebLogic Validator5。只需添加web-inf/validation.xml即可

<?xml version="1.0" encoding="UTF-8"?>
<validation-config
    xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration http://www.jboss.org/xml/ns/javax/validation/configuration/validation-configuration-1.0.xsd">

    <default-provider>org.hibernate.validator.HibernateValidator</default-provider>
</validation-config>

最有可能的是,您需要在deployment.xml中将classloaderMode设置为PARENT_LAST。在耳朵的情况下,它应该看起来像

<?xml version="1.0" encoding="UTF-8"?>
<appdeployment:Deployment xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:appdeployment="http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi" xmi:id="Deployment_1">
  <deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1" deploymentId="0" startingWeight="1">
    <modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1" deploymentId="1" startingWeight="10000" uri="foureyes-ri.war" classloaderMode="PARENT_LAST"/>
  </deployedObject>
</appdeployment:Deployment>

我不确定,但我将Validation-API1.1.0打包到WAR,它对我有效。

 类似资料:
  • 在spring mvc中,当用户在输入字段中输入空白时,如何显示自定义消息或删除jsp形式的整数字段输入,并使用hibernate验证器进行验证?它目前显示: 未能将java.lang.String类型的属性值转换为属性FreePass所需的int类型;嵌套异常是java.lang.NumberFormatException:对于输入字符串:“

  • 问题内容: 我想注册一个可以处理以下处理程序方法定义的自定义 我可以注册我的解析器,这只是创建了一个通过重写通过请求参数对象,从。当Spring尝试解析该参数时,它将遍历其列表(有很多),并选择它的第一个。 在上面的例子中,虽然我的解析器将被调用,我的论点将得到初始化,注释将不会被处理 ,并 为解析器,一个是因为它需要一个会失败,或在处理方法的说法,这我不没有。 如果我尝试通过添加来修复它 一实施

  • 我正在按照本指南使用Spring表单验证,但我无法在自己的程序中验证表单。我完全按照指南中的描述去做,但在我的应用程序中却不起作用。 我使用Spring Tools Suite并下载了示例应用程序,以查看它是否真的可以工作。我看不出究竟是什么原因导致表单验证发生在示例应用程序中而不是我的应用程序中。我试图通过从POM中移除依赖项来缓慢地更改示例应用程序,以使其中断,但它继续工作.....到底是哪个

  • 我将在Spring中使用DDD构建一个新应用程序。我将有一个REST适配器、一个JPA适配器和我的域模型。 我的问题是在哪里进行现场验证?假设我有一个REST方法来下订单,我应该在哪里验证请求中的订单数量是否大于0?在REST适配器的DTO中?或者在我的域实体中,因为验证应该是业务逻辑的一部分? 如果我在REST请求的DTO中进行验证,我就可以将验证检查添加到DTO的字段中,并在我的REST控制器

  • 我提出了一个使用JSR303组进行条件验证的概念。“有条件地”意味着我有一些字段,这些字段只有在另一个字段具有特定值时才相关。 示例:有一个选项可以选择是以个人身份注册还是以公司身份注册。选择公司时,用户必须填写包含公司名称的字段。 但是Spring由于数据绑定而打破了这个想法。在验证开始之前,Spring将数据绑定到RegisterForm。例如,如果类型不兼容(应为int值,但用户用字母填充表

  • 问题内容: 我想知道什么是执行用户输入的表单验证的最干净,最好的方法。我已经看到一些开发人员实现了。有一个问题:我看到它验证了一个类。是否必须使用用户输入的值手动填充该类,然后将其传递给验证器? 我对验证用户输入的最干净,最好的方法感到困惑。我知道传统的使用方法然后手动检查的方法,但是我不想在我的工具中进行所有的验证。在这方面的一些好的建议将不胜感激。我没有在此应用程序中使用Hibernate。