springmvc对jsr303验证
最近在项目中使用了jsr303验证,jsr303是一个数据验证的规范,Hibernate Validator 是 Bean Validation 的参考实现。由于spring3之后,对jsr303提供了支持,因此,在项目中使用了spring3,采用了jsr303的验证功能,同时,在项目中因对相关的配置出现了些问题,现对其进行总结:
下载依赖包:
JSR 303 – Bean Validation 规范下载地址: http://jcp.org/en/jsr/detail?id=303
Hibernate Validator下载地址:http://www.hibernate.org/subprojects/validator.html
这里我使用的是hibernate-validator4.3.1,通过下载,在hibernate-validator中能找到相关的依赖jar
准备工作做好之后,废话就不多说了,直接进入主题。
这里主要是针对springmvc的xml文件进行相应的配置:
<!-- 国际化消息配置 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="defaultEncoding" value="UTF-8"></property> <property name="basenames"> <list> <value>classpath:com/message</value> </list> </property> </bean> <!-- spring提供的bean validator接口配置 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <property name="validationMessageSource" ref="messageSource"/> </bean> <!--注解驱动,此句必须加上validator属性指向beanvalidator的bean中的id--> <mvc:annotation-driven validator="validator">
在我的项目当中,由于之前有人配了RequestMappingHandlerMapping,RequestMappingHandlerAdapter二个对象的BEAN,导倒了最终验证不成功,主要是跟<mvc:annotation-driven validator="validator">发生冲突,在控制层会扫描二次。这里不需要配RequestMappingHandlerMapping,RequestMappingHandlerAdapter相应的bean。通过简单的配置,基本上能够完成了验证功能。
在javabean中验证代码样式:
@NotEmpty(message="{menu.menuName}") @Size(max=30,message="{menu.menuName.length}") private String menuName = "";
在springMVC中控制层代码样式:
public String addMenuExec(HttpServletRequest request,HttpServletResponse response, @Valid SysMenu sysMenu,BindingResult bindingResult)
以上代码:需要对验证的javaBean前加入@Valid注解,有些帖子上,说还需要加入@modeAttriture注解,但通过验证,不需要加也可以。另外,bindingResult主要是将验证的结果放入该类当中。
通过以上几个步聚,就能完成效验功能,非常easy。呵。