Hibernate Validator是Hibernate提供的一个开源框架,使用注解方式非常方便的实现服务端的数据校验。
Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint(约束) 的实现,除此之外还有一些附加的 constraint。
在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效。
常用注解如下:
| **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)引入依赖
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
2)在po类加上注解
@Id
@KeySql(useGeneratedKeys = true)
private Long id;
@NotEmpty(message = "用户名不能为空!")
@Length(min = 4, max = 15, message = "长度在4-15")
private String username;// 用户名
//不被json化
@Length(min = 4, max = 15, message = "密码长度在4-15")
@JsonIgnore
private String password;// 密码
@Pattern(regexp = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$", message = "手机号不正确")
private String phone;// 电话
3)在controller中的接口参数中给对象加上@Valid
@PostMapping("register")
public Result register(@Valid User user, BindingResult result, @RequestParam("code") String code) {
// if (result.hasFieldErrors()) {
// throw new RuntimeException(result.getFieldErrors().stream().
// map(e -> e.getDefaultMessage()).collect(Collectors.joining("|")));
// }
userService.register(user, code);
return new Result(ResponseStatusEnum.CREATED.getCode(),"创建成功");
}
}
(加入BindingResult对象,将自己需要的数据提取出来处理 (可省略))即可完成数据校验.