一、JSR-303简介
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。
此实现与 Hibernate ORM 没有任何关系。 JSR 303 用于对 Java Bean 中的字段的值进行验证。
Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。
注:可以使用注解的方式进行验证
二、常见的使用参数
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
@NotEmpty、@NotBlank、@NotNull三种注解的区别
1. @NotNull:不能为空,但是可以为empty,没有size约束。一般用在 Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制
2. @NotBlank:该注解只能用于String,不能为空,size需要大于0;
3. @NotEmpty:不能为 null,且长度必须大于 0,一般用在集合类上或者数组上。
三、常见使用示例
1.给bean添加校验注解
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@NotNull(message = "ID不能为空")
private Long id;
//姓名
@NotBlank(message = "姓名不能为空")
private String name;
//邮箱
@Email(message = "必须是email格式")
private String email;
}
2.在Controller层开启@Valid验证注解
@RequestMapping(value = "/update",method = RequestMethod.POST)
@ApiOperation("用户修改")
public ResponseData updateUserInfo(@RequestBody @Validated User user) {
return service.updateUserInfo(user);
}
四、分组校验
应用场景:添加和查询等需要不同的校验规则时。
1.在bean内定义分组信息
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
//主键id
private Long id;
//姓名
@NotBlank(message = "姓名不能为空",groups = {User.add.class, User.query.class})
private String name;
//年龄
@NotNull(message = "年龄不能为空",groups = {User.add.class})
private String age;
//邮箱
@Email(message = "必须是email格式",groups = {User.add.class,User.delete.class})
private String email;
public @interface add {
}
public @interface delete {
}
public @interface query {
}
}
2.在不同的接口中去引用分组的校验
@RequestMapping(value = "/queryInfoUser",method = RequestMethod.GET)
@ApiOperation("查询单个用户")
public ResponseData queryUser(@Validated(User.query.class) @ApiIgnore User user) {
return service.queryOneInfo(user);
}