Hibernate-Validator

Hibernate Validator是Hibernate对JSR303中的内置约束的一套实现,还加入了自己的约束

使我们可以通过注解完成bean的校验,它的底层是Hibernate通过反射帮我们实现的,肯定会比我们自己写一堆if强!

常用注解如下:

Constraint 详细信息
@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 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range 被注释的元素必须在合适的范围内
@NotBlank 被注释的字符串的必须非空
@URL(protocol=,host=, port=,regexp=, flags=) 被注释的字符串必须是一个有效的url
@CreditCardNumber 被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性

坐标

1
2
3
4
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>

我们在User对象的部分属性上添加注解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class user {
@Id
@KeySql(useGeneratedKeys = true)
private Long id; //bigint类型

@NotEmpty(message = "用户名不能为空")
@Length( min=4,max=32,message = "用户名长度为4-32位")
private String username;

// 将来前端查询用户的信息,加上jsonIgnore 就不会暴露给前端,尽管他是被加密过
@JsonIgnore
@Length(min = 4,max = 32,message = "密码长度为4-32位")
private String password;

@JsonIgnore
private String salt; //密码的密盐

@Pattern(regexp = "/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$",message = "手机号不正确")
private String phone;
private Date created;
}

开启注解

在controller中只需要在入参的位置上给User添加 @Valid注解即可。

一旦用户提交过来的数据不符合我们添加的注解,默认是springMvc自己处理错误,返回错误信息

如何自己处理异常?

在User后,紧跟着 Bindingresult result 可以开启自动处理错误的机制

其中这个result就储存了所有的异常信息