数据校验
数据校验在web 应用里是非常重要的功能,通过数据校验,可以避免因为客户端非法数据的录入,导致的服务器类型转换异常,以及非法数据的数据保存。
数据校验分为客户端校验和服务器校验。
客户端校验是指,通过JavaScript 脚本语言对提交服务器的表单数据进行校验。校验通过以后,再将表单数据提交给服务器。 客户端校验优点是直观,可以在不访问服务器的情况下,直接对非法数据的错误信息直接在页面上显示出来。 客户端校验的缺点是并不安全,因为客户端校验需要依赖于浏览器和JavaScript。很多时候,可以绕过浏览器和JavaScript,直接访问服务器。
服务器校验是指,在服务器端接受到客户端提交的表单数据后,在访问业务组件前,进行的数据验证。验证通过,则访问业务组件,否则,给客户端发送错误提示。 服务器端校验优点是比较安全,是客户端数据访问业务组件的最后一道屏障。 服务器端校验缺点是执行效率相对较低。多了访问服务器的步骤,校验由服务器完成,所以,服务器压力要大一些。
SpringMVC 服务器校验
SpringMVC 拥有自己独立的数据校验框架,同时支持 JSR 303 标准的校验框架。Hibernate Validator 是 JSR 303 的一个参考实现
导入依赖
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b11</version>
</dependency>
在实体类属性中定义校验规则:
@NotBlank 判断字符串是否为null 或 空串(去掉首位空格)
@Min 判断数值最小值
@Max 判断数值最大值
@Email 判断邮箱是否合法
@Pattern(regexp="\d+") 判断是否匹配指定正则表达式
每个校验规则都有 message 属性,用于自定义错误信息。
/*姓名*/
@NotBlank(message = "姓名必须填写")
@Pattern(regexp = "[a-zA-Z\\u4e00-\\u9fa5]{2,}",message = "姓名必须为两个以上的汉字或字母")
private String name;
/*电话*/
@Pattern(regexp = "1[35789]\\d{9}",message = "电话必须以13、15、17、18、19开始的11位数")
private String phone;
/*工资*/
@NotBlank(message = "工资必须填写")
@Max(value = 100000,message = "工资不能高于十万")
@Min(value = 1800,message = "工资不能低于1800")
private Integer money;