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对jsr303验证

准备工作做好之后,废话就不多说了,直接进入主题。

这里主要是针对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。呵。

jsr303详细介绍,转载:http://www.oschina.net/question/129540_20649

相关推荐