gpt4 book ai didi

java - Bean 验证不起作用

转载 作者:行者123 更新时间:2023-12-03 20:25:26 29 4
gpt4 key购买 nike

我目前正在学习 spring,但我受困于不适用于我的 bean 的验证注解。我真的不明白缺少什么,我需要一只手 :)

我有一个 Controller :

@Controller
public class CirclesController {

@RequestMapping(value = "/createCircle", method = RequestMethod.POST)
public ModelAndView createCircle(@Valid Circle circle, BindingResult res) {

if (res.hasErrors()) {
System.out.println("Can't validate this form..");
else
System.out.println("Created new circle : " + circle);
}
}

还有一个 bean :

public class Circle {

@Size(min = 5) // This is what I try to validate
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

我配置了 web.xml

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:conf/dao-context.xml
classpath:conf/services-context.xml
classpath:conf/beans-context.xml
</param-value>
</context-param>

我的项目看起来像这样:

Project

*-context.xml 有 component-scan 和 anotation-config 标签:

<context:component-scan base-package="com.test.app.[package-name]">
</context:component-scan>
<context:annotation-config></context:annotation-config>
<tx:annotation-driven></tx:annotation-driven>

我拥有所有外部库(hibernate、hibernate-api、javax.validation)并且运行时没有错误...但是当我填写少于 5 个字符的“名称”字段时,我总是得到“创建的新圈子:Circle{name=txt}”而不是“无法验证此表单..”。

编辑:

这是我的类路径:

classpath

和 servlet-context.xml :

<context:component-scan base-package="com.test.app.controllers"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

最佳答案

提供您的依赖项列表和 circles-servlet.xml 将为您的问题提供完整的上下文。

然而,就我所见,可能只缺少两件事。首先确保您的类路径中有验证提供程序,例如 hibernate-validator,其次确保您有

 <mvc:annotation-driven />

circles-servlet.xml 中的元素,它支持启用对 Controller 参数对象的验证,这些参数对象用 @Valid

注释

评论后更新

bean validation 有一个更新的规范,因此您应该按照以下方式调整您的依赖关系

hibernate-validator-5.x.x 
validation-api-1.1.x

它将实现一个 JSR-349

hibernate-validator-4.x.x
validation-api-1.0.x.

它实现了 JSR-303

评论中的问题意味着您很可能混合了依赖项,因此将 hibernate-validator-5.x.x 与 validation-api-1.0.x 一起使用,或者反过来错过了它

关于java - Bean 验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28607848/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com