我目前正在学习春天,但我仍然坚持使用不能与我的bean一起使用的验证注释。我真的不明白什么是失踪,我需要一只手:)
我有一个控制器:
@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);
}
}
还有一个豆子:
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>
我的项目看起来像那样:
* -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)并且运行时没有错误... 但是当我填满这个领域的时候,#34; name&#34;机智少于5个字符,我总是得到&#34;创建新的圆圈:Circle {name = txt}&#34;而不是&#34;无法验证此表单。&#34;。
编辑:
这是我的类路径:
和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>
答案 0 :(得分:7)
提供依赖项列表和 circles-servlet.xml 将为您的问题提供完整的上下文。
然而,就我所看到的,可能只有两件事情遗失。首先确保你的类路径上有hibernate-validator
等验证提供程序,第二个确保你有
<mvc:annotation-driven />
circles-servlet.xml 中的元素,它支持对使用 @Valid
注释的控制器的参数对象启用验证评论后更新
bean验证具有更新的规范,因此您应该按以下方式对齐依赖项
hibernate-validator-5.x.x
validation-api-1.1.x
将实现JSR-349
OR
hibernate-validator-4.x.x
validation-api-1.0.x.
实现JSR-303
您在评论中的问题意味着您很可能混合了依赖项,因此将hibernate-validator-5.x.x与validation-api-1.0.x一起使用或者错过了相反的方式
答案 1 :(得分:1)
请参阅本页的最底部:
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html
将以下内容添加到spring config:
<!-- JSR-303/JSR-349 support will be detected on classpath and enabled automatically -->
<mvc:annotation-driven/>
答案 2 :(得分:0)
将@RequestBody注释与@Valid注释一起使用
public ModelAndView createCircle(@Valid @RequestBody Circle circle, BindingResult res) {