springmvc-数据验证(JSR303)

数据校验

在web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对 数据进行验证。输入验证分为客户端验证与服务器端验证。客户端验证主要通过JavaScript脚本进行,而服务器端验证则主要通过Java代码进行验证。 为了保证数据的安全性,一般情况下,客户端和服务器端验证都是必须的

Spring MVC 框架中有以下两种方法可以验证输入数据:

  • 利用 Spring 自带的验证框架。
  • 利用 JSR 303 实现。

这里使用JSR303验证:

对于 JSR 303 验证,目前有两个实现,一个是 Hibernate Validator,一个是 Apache BVal。这里采用的是 Hibernate Validator,注意它和 Hibernate 无关,只是使用它进行数据验证。

下载 Hibernate Validator

用户可以通过地址“https://sourceforge.net/projects/hibernate/files/hibernate-validator/”下载 Hibernate Validator

关键步骤

导入jar包

在这里插入图片描述

在SpringMVC.xml中配置验证器并注册注解驱动

在这里插入图片描述

定义实体类,打注解标记

public class User {
	//@NotEmpty一般用在字符串,判断内容非空
	//message:验证不通过时的错误提示信息
	@NotEmpty(message = "用户名不能为空")
	//@Size验证字符串长度
	@Size(min = 3,max = 6,message="用户名只能是3到6位")
	private String account;
	
	@NotEmpty(message="密码不能为空")
	@Size(min = 3,max = 6,message="密码只能是3到6位")
	private String password;
	
	@NotNull(message="年龄不能为空")//@NotNull判断引用类型非空
	@Min(value = 18,message="年龄不能小于18岁")//最小值
	@Max(value=100,message="年龄不能大于100岁")//最大值
	private Integer age;
	
	//指定日期格式
	@DateTimeFormat(pattern = "^\\d{4}-\\d{2}-\\d{2}$")
	private Date birthday;
	
	@NotEmpty(message="邮箱不能为空")
	@Email(message="邮箱格式不正确")//@Email邮箱格式验证
	private String email;
}

controller中的方法

@Controller
public class UserController {
	
	@RequestMapping("/test.do")
	public ModelAndView test01(@Validated User user,BindingResult br) {
		ModelAndView mv = new ModelAndView();
		//获取未通过的总条数
		int errorCount = br.getErrorCount();
		if(errorCount>0) {
			//获取错误对象
			FieldError fieldAccError = br.getFieldError("account");
			//判断是否有错误信息
			if(fieldAccError!=null) {
				//fieldAccError.getDefaultMessage()获取对应的错误信息提示
				mv.addObject("account", fieldAccError.getDefaultMessage());
			}
			FieldError fieldPassError = br.getFieldError("password");
			if(fieldPassError!=null) {
				mv.addObject("password", fieldPassError.getDefaultMessage());
			}
			FieldError fieldAgeError = br.getFieldError("age");
			if(fieldAgeError!=null) {
				mv.addObject("age", fieldAgeError.getDefaultMessage());
			}
			FieldError fieldBirError = br.getFieldError("birthday");
			if(fieldBirError!=null) {
				mv.addObject("birthday", fieldBirError.getDefaultMessage());
			}
			FieldError fieldEmailError = br.getFieldError("email");
			if(fieldEmailError!=null) {
				mv.addObject("email", fieldEmailError.getDefaultMessage());
			}
			mv.setViewName("/jsp/index.jsp");
			return mv;
		}
		mv.setViewName("/jsp/index.jsp");
		System.out.println("验证通过");
		return mv;
	}	
}

常用注解检查

1)空检查
  • @Null:验证对象是否为 null。
  • @NotNull:验证对象是否不为 null,无法检查长度为 0 的字符串。
  • @NotBlank:检查约束字符串是不是 null,以及被 trim 后的长度是否大于 0,只针对字符串,且会去掉前后空格。
  • @NotEmpty:检查约束元素是否为 null 或者是 empty。

如:

@NotEmpty(message="密码不能为空")
	private String password;
2)boolean 检查
  • @AssertTrue:验证 boolean 属性是否为 true。
  • @AssertFalse:验证 boolean 属性是否为 false。

如:

@AssertTrue
private boolean isLogin;
3)长度检查
  • @Size(min=,max=):验证对象(Array、Collection、Map、String)长度是否在给定的范围之内。
  • @Length(min=,max=):验证字符串长度是否在给定的范围之内。

如:

@Size(min = 3,max = 6,message="用户名只能是3到6位")
	private String account;
4)日期检查
  • @Past:验证 Date 和 Callendar 对象是否在当前时间之前。
  • @Future:验证 Date 和 Calendar 对象是否在当前时间之后。
  • @Pattern:验证 String 对象是否符合正则表达式的规则。

如:

//指定日期格式
	@DateTimeFormat(pattern = "^\\d{4}-\\d{2}-\\d{2}$")
	private Date birthday;
5)数值检查
名称说明
@Min验证 Number 和 String 对象是否大于指定的值
@Max验证 Number 和 String 对象是否小于指定的值
@DecimalMax被标注的值必须不大于约束中指定的最大值,这个约束的参数是一个通过 BigDecimal 定义的最大值的字符串表示,小数存在精度
@DecimalMin被标注的值必须不小于约束中指定的最小值,这个约束的参数是一个通过 BigDecimal 定义的最小值的字符串表示,小数存在精度
@Digits验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=)验证字符串是否符合指定格式的数字,integer 指定整数精度,fraction 指定小数精度
@Range(min=,max=)检查数字是否介于 min 和 max 之间
@Valid对关联对象进行校验,如果关联对象是个集合或者数组,那么对其中的元素进行校验,如果是一个 map,则对其中的值部分进行校验
@CreditCardNumber信用卡验证
      | 对关联对象进行校验,如果关联对象是个集合或者数组,那么对其中的元素进行校验,如果是一个 map,则对其中的值部分进行校验 |

| @CreditCardNumber | 信用卡验证 |
| @Email | 验证是否为邮件地址,如果为 null,不进行验证,通过验证 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值