课程名称:Java全栈工程师
课程章节:阶段二:Java SpringBoot API打造高级电商业务后端
课程讲师:7七月
课程内容:JSR303对校验的应用
JSR(Java Spectification Request,Java规范请求)作为正式规范文档,描述被提议加入到 Java 体系中的规范和技术
JSR303 — Bean Validator 1.0 — Hibernate Validator 4.3.1.Final
JSR349 — Bean Validator 1.1 — Hibernate Validator 5.1.1.Final
JSR380 — Bean Validator 2.0 — Hibernate Validator 6.0.1.Final
Spring Validator 在 Hibernate Validator 基础上进行二次封装,以满足 Spring 环境中更简单、高效地对数据进行验证
优势:校验的目的也是为了检验传参的合法性,将校验的代码从 Controller 或 Service 中分离出,代码不会看起来很臃肿,可读性更强,也更优雅
常用注解:
空值类
@Null
@NotNull:@NotNull(message = "用户ID不能为空")
@NotEmpty:@NotEmpty(message = "用户名不能为空")
@NotBlank:@NotBlank(message = "密码不能为空")
范围类:
@Length:min:最小长度、max:最大长度
@Min:@Min(value = 18, message = "年龄不能小于18岁")
@Max:@Max(value = 30, message = "年龄不能超过30岁")
@Size:@Size(min = 1, max = 30, message = "不能少于1位好友")
日期类:
@Past:@Past(message = "日期不能为当前日期和未来日期")
其他类:
@Email:@Email(message = "邮箱必须有效")
@URL
@AssertTrue
@Pattern
@Valid
当然,Spring Validator 不只是只有这些简单的注解,还有高级用法,如分组等,它的功能也不是局限于参数校验,还可以校验返回值、构造方法。也可以根据自己独特的业务场景自定义校验规则
使用举例:需要在 Controller 添加 @Validated 注解使之生效
校验参数:在 Controller 接口需要校验的参数前,添加合适的校验注解
实体校验:如果需要校验 Bean 中的 Bean,需要在关联字段加上 @Valid
课程收获:
使用 Bean Validation 校验机制,对基本数据类型进行校验,方法是在实体类属性上使用注解标识校验方式,最后在 Controller 中具体方法的形参里添加 @Vlidated 注解。Bean Validation 校验有一个缺点是,我们的数据校验是在 Java 实体类里进行约束的,如果有多个处理器方法需要用到同一个实体类,那么定义在实体类属性上的校验规则就不好划分了,有的处理器只需要校验一个属性,而有的处理器需要校验多个属性,不可能为每一个处理器都创建一个实体类。一个解决的方法就是使用分组校验方式,除此之外,还可以使用 Spring 的 Validator 接口校验,它允许我们在外部指定某一对象的校验规则