使用Bean validation(JSR303)
1.Bean Validation 中内置的 constraint 约束
| Constraint | 详细信息 |
| :---------------------------- | :----------------------------------------------------------- |
| @Null | 被注释的元素必须为 `null` |
| @NotNull | 被注释的元素必须不为 null【一般用于非字符串】 |
| @NotBlank | 字符串不能为null 和空字符串"",会去掉前后空格【一般用于字符串】 |
| @NotEmpty | 集合长度不能为0【一般用于集合】 |
| `@AssertTrue` | 被注释的元素必须为 `true` |
| `@AssertFalse` | 被注释的元素必须为 `false` |
| `@Min(value)` | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
| `@Max(value)` | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
| `@DecimalMin(value)` | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
| `@DecimalMax(value)` | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
| `@Size(max, min)` | 被注释的元素的大小必须在指定的范围内 |
| `@Digits (integer, fraction)` | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
| `@Past` | 被注释的元素必须是一个过去的日期 |
| `@Future` | 被注释的元素必须是一个将来的日期 |
| `@Pattern(value)` | 被注释的元素必须符合指定的正则表达式 |
2.在springboot中使用
导包
<!--用2.3.0会导致后面notempty注解不生效
如果用的是2.3.0以后的版本也可以添加如下依赖即可解决-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
实体类字段上加注解
@NotBlank(message = "名称不可为空")
private String name;
对象参数前加注解@Validated
public JSONResult register(@RequestBody @Validated RegisterParamDto dto)
3自定义注解实现校验(对手机号)
定义校验注解
@Target( ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = PhoneValidator.class)//此处指定了校验规则/器
public @interface Phone {
//SpringValidator必要的三个属性
String message() default "无效的手机格式";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
定义校验器
@Service
public class PhoneValidator implements ConstraintValidator<Phone, String> {
private static final String PHONE_REGEX = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0-9]))\\d{8}$";
@Override
public void initialize(Phone constraintAnnotation) {
//初始化
}
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
//对值进行手机号正则判断
Pattern p = Pattern.compile(PHONE_REGEX);
Matcher m = p.matcher(value);
return m.matches();
}
}
使用校验注解
@Phone
private String phone;
对象参数前加注解@Validated
public JSONResult register(@RequestBody @Validated RegisterParamDto dto)