@参数校验

搞定SpringBoot难题!设计优秀的后端接口?轻松解决 
1、Validator参数

@Null:被注解元素必须为null(为了节省篇幅下面用“元素”代表“被注解元素必须为”)
@NotNull:元素不为null
@AssertTrue:元素为true
@AssertFalse:元素为false
@Min(value):元素大于或等于指定值
@Max(value):元素小于或等于指定值
@DecimalMin(value):元素大于指定值
@DecimalMax(value):元素小于指定值
@Size(max,min):元素大小在给定范围内
@Digits(integer,fraction):元素字符串中的整数位数规定最大integer位,小数位数规定最大fraction位
@Past:元素是一个过去日期
@Future:元素是将来日期
@Pattern:元素需要符合正则表达式

@Eamil:元素为邮箱
@Length:字符串大小在指定范围内
@NotEmpty:字符串必须非空(目前最新的6.1.5版本已弃用,建议使用标准的@NotEmpty)
@Range:数字在指定范围内

2、@NotNull或@NotBlank的区别

对于String来说有时候会使用@NotNull或@NotBlank,它们的区别如下:

@NotEmpty:不能为null并且长度必须大于0,除了String外,对于Collection/Map/数组也适用
@NotBlank:只用于String,不能为null,并且调用trim()后,长度必须大于0,也就是必须有除空格外的实际字符
@NotNull:不能为null

3、校验模式设置

Hibernate Validator有两种校验模式:

普通模式:默认模式,会校验所有属性,然后返回所有的验证失败信息
快速失败模式:只要有一个验证失败就返回
使用快速失败模式需要通过HibernateValidateConfiguration以及ValidateFactory创建Validator,并且使用Validator.validate()进行手动验证。

4、@Valid与@Validated

@Valid是javax.validation包里面的,而@Validated是org.springframework.validation.annotation里面的,是@Valid的一次封装,相当于是@Valid的增强版,供Spring提供的校验机制使用,相比起@Valid,@Validated提供了分组以及组序列的功能。

5、分组

当需要在不同的情况下使用不同的校验方式时,可以使用分组校验。比如在注册时不需要校验id,修改信息时需要校验id,但是默认的校验方式在两种情况下全部都校验,这时就需要使用分组校验。

6、组序列

默认情况下,不同组别的约束验证的无序的。

有些时候顺序并不重要,而有些时候顺序很重要,比如:第二个组中的约束验证依赖于一个稳定状态运行,而这个稳定状态由第一个组来进行验证某个组的验证比较耗时,CPU和内存的使用率相对较大,最优的选择是将其放在最后进行验证。因此在进行组验证的时候需要提供一种有序的验证方式,一个组可以定义为其他组的序列,这样就可以固定每次验证的顺序而不是随机顺序,另外如果验证组序列中,前面的组验证失败,则后面的组不会验证。

7、自定义校验

尽管Hibernate Validator中的注解适用情况很广了,但是有时候需要特定的校验规则,比如密码强度,人为判定弱密码还是强密码。也就是说,此时需要添加自定义校验的方式,有两种处理方法:

  • 自定义注解
  • 自定义Validator

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值