需求
在使用validated校验的时候, 大部分场景的校验是可以满足的. 但是某一些场景不能实现, 比如对状态的校验: status: 1或者2. 所以需要我们自定义注解.
废话不多说, 直接上代码实现 (其它校验方式, 同理)
代码实现
- 自定义注解
/**
* 使用方式:
* @IncludeValid(value = {"0","1"}, message = "状态值必须为0,1")
* private Integer status
*
* @ Description : 校验值是否为指定的值
* @ CreateDate : 2021/2/2 9:57
* @ Version : 1.0.0
* @ Author : Jason
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.PARAMETER})
@Constraint(validatedBy = IncludeValidatorClass.class)
public @interface IncludeValid {
String[] value() default {};
String message() default "flag is not found";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
- 具体的逻辑校验
/**
* @ Description : 校验值是否为指定的值, 处理类
* @ CreateDate : 2021/2/2 9:57
* @ Version : 1.0.0
* @ Author : Jason
*/
public class IncludeValidatorClass implements ConstraintValidator<IncludeValid,Integer> {
private String[] values;
@Override
public void initialize(IncludeValid includeValid) {
this.values = includeValid.value();
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
boolean isValid = false;
if(value==null){
//当状态为空时使用默认值
return true;
}
for(int i=0;i<values.length;i++){
if(values[i].equals(String.valueOf(value))){
isValid = true;
break;
}
}
return isValid;
}
}
使用方式
@NotEmpty(message = "用户名不能为空")
@ApiModelProperty("用户名")
private String name;
// 自定义的校验
@IncludeValid(value = {"1", "2"}, message = "用户的状态不正确")
@ApiModelProperty("1-正常, 2-关闭")
private Integer status;