javax.validation.constraints 自定义注解验证枚举值

前言:

一个工具类,定义了一个 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请求测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值