Spring Boot + validation + AOP 请求参数校验
一、validation 校验注解
通用
@Null
被注释的属性必须为 null
@NotNull
被注释的属性必须不为 null
@AssertTrue
被注释的属性必须为 true
@AssertFalse
被注释的属性必须为 false
字符串/数组/集合检查:(字符串本身就是个数组)
@Pattern(regexp="reg")
验证字符串满足正则
@Size(max, min)
验证字符串、数组、集合长度范围
@NotEmpty
验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank
验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
数值检查:同时能验证一个字符串是否是满足限制的数字的字符串
@Min(value)
被注释的属性必须是一个数字,其值必须大于等于指定的最小值
@Max(value)
被注释的属性必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)
被注释的属性必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value)
被注释的属性必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=)
被注释的属性的大小必须在指定的范围内
@Digits(integer, fraction)
被注释的属性必须是一个数字,其值必须在可接受的范围内
@Pattern(regex=,flag=)
被注释的属性必须符合指定的正则表达式
日期检查:Date/Calendar
@Past
限定一个日期,日期必须是过去的日期
@Future
限定一个日期,日期必须是未来的日期
Hibernate Validator 附加的 constraint
@Email
被注释的属性必须是电子邮箱地址
@Length(min=,max=)
被注释的字符串的大小必须在指定的范围内
@Range(min=,max=,message=)
被注释的属性必须在合适的范围内
二、依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
三、代码实例
1.SpmkApproveSummaryDto.java
用 validation 校验
import java.util.List;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import cn.hutool.json.JSONObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SpmkApproveSummaryDto{
@NotBlank(message = "title为空")
@ApiModelProperty(value = "标题 ", example = "标题", required = true)
private String title;
@NotBlank(message = "approveName为空")
@ApiModelProperty(value = "审批名称 ", example = "审批名称", required = true)
private String approveName;
@NotBlank(message = "initiator为空")
@ApiModelProperty(value = "发起人名称 ", example = "发起人名称", required = true)
private String initiator;
@NotNull(message = "assoType为空")
@DecimalMax(value = "9",message = "assoType 只能为 0