前言:
一个工具类,定义了一个 TypeConstraint 的注解,验证整数的类型值
以后可以直接拿来用,做个笔记了
正文 - 直接上代码
- 入参对象
import com.deao.flow.annotation.TypeConstraint;
import lombok.Data;
import javax.validation.constraints.Pattern;
/**
* 查询任务处理者入参
* @date 2021/3/25 11:29
* @author wei.heng
*/
@Data
public class ModelTaskHandlerPO {
/** 处理人所属平台 */
@Pattern(regexp = "^[S|T]$", message = "平台只能是 S-学生端 或 T-教师端")
private String platform;
/** 任务分配类型 */
@TypeConstraint(values = {1,10,15,20,25,30,40,50,55,60})
private Integer assignType;
}
- 自定义注解
import com.deao.flow.validator.TypeValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
* 整数类型验证器注解(验证整数的枚举值)
* @date 2021/3/25 10:48
* @author wei.heng
*/
@Target( {ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = TypeValidator.class)
@Documented
public @interface TypeConstraint {
/** 异常提示信息 */
String message() default "类型异常";
/** 校验值 */
int[] values() default {};
/** 默认配置 - 不加要报错 */
Class<?>[] groups() default {};
/** 默认配置 - 不加要报错 */
Class<? extends Payload>[] payload() default {};
}
- 类型验证器
import com.deao.flow.annotation.TypeConstraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 类型验证器
* @date 2021/3/25 10:28
* @author wei.heng
*/
public class TypeValidator implements ConstraintValidator<TypeConstraint, Integer> {
private TypeConstraint annotation;
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
if(value == null){
return false;
}
int[] values = annotation.values();
List<Integer> list = Arrays.stream(values).boxed().collect(Collectors.toList());
return list.contains(value);
}
@Override
public void initialize(TypeConstraint typeConstraintAnnotation) {
this.annotation = typeConstraintAnnotation;
}
}
测试
- 测试方法
/**
*
* 查询任务处理对象
* @return com.ruoyi.common.core.domain.R<java.util.Map<java.lang.String,java.lang.Long>>
* @date 2021/3/25 9:54
* @author wei.heng
*/
@GetMapping("/taskHandler")
public R<Map<String, Long>> getTaskHandler(@Valid ModelTaskHandlerPO handlerPO){
System.out.println("taskHandler============ModelTaskHandlerPO:");
System.out.println(JSON.toJSONString(handlerPO));
return R.ok();
}
- postman请求测试