文章目录
SpringMVC进行数据校验
SpringMVC本身没有数据校验功能,需要借助hibernate的校验框架。
- 在vo对象的属性上打上相应验证注解
- 配置validateMessage.properties文件,用来存储错误提示信息。
- 在springmvc.xml中开启扫描,开启校验注解,注册校验对象,注册校验对象需要的相关设置对象(关联validateMessage.properties路径等设置)。
- 在control方法的对象形参前加上验证注解标记,就可以在对该对象进行校验。校验的返回消息可以通过
BindingResult br
来获得。 - 以及将
BindingResult br
对象的消息提取出来。
举例
在vo对象的属性上打上相应验证注解
package com.bb.pojo;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotBlank;
public class User {
@NotBlank(message="账号不能为空")
private Integer id;
@NotBlank(message="账号不能为空")
@Size(max=6,min=2,message="账号长度2-6位")
private String name;
@NotBlank(message="地址不能为空")
@Size(max=6,min=2,message="地址长度2-6位")
private String address;
@Max(value=100,message="年龄最大100")
@Min(value=1,message="年龄最小1")
private int age;
}
列举一些验证注解
注解名 | 作用 |
---|---|
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
@Valid | 被注释的元素是一个对象,需要检查此对象的所有字段值 |
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
配置validateMessage.properties文件
用来存储错误提示信息。
USER_NAME_NOTEMPTY=账号不能为空
USER_NAME_SIZE=username size 2 - 6
这些常量可以作为验证注解的提示值来使用
在springmvc.xml中配置验证对象
<!-- 开启扫描 -->
<context:component-scan base-package="com.bb.controller"></context:component-scan>
<!-- 开启SpringMVC注解 -->
<mvc:annotation-driven validator="validator" ></mvc:annotation-driven>
<!-- hibernate 校验 -->
<!--添加对JSR-303验证框架的支持 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!--设置则默认为classpath下的 ValidationMessages.properties -->
<property name="validationMessageSource" ref="validatemessageSource"/>
</bean>
<bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:validateMessage"/>
<property name="fileEncodings" value="utf-8"/>
<property name="cacheSeconds" value="120"/>
</bean>
第一个bean引用了第二个bean,spring开启注解引用了第一个bean。
在获取对象的前加上启用注解 @Validated
,获取验证信息对象 BindingResult
。
@RequestMapping("/add")
public String add(@Validated User user,BindingResult br,Model m){
List<ObjectError> allErrors = br.getAllErrors();
if(allErrors!= null && allErrors.size() > 0){
for (ObjectError objectError : allErrors) {
System.out.println(objectError.getDefaultMessage());
}
m.addAttribute("errors", allErrors);
}
return "/user.jsp";
}
总结 :通过以上注解,配置。获取到的对象就经过了验证,并获得了验证信息。实际开发中,属性的验证规则需要动态改变(不同的请求,同一个属性会有不同的验证规则)。就需要使用验证分组
项目打包:(exlipse) 提取码:comk