首页 > 其他分享 >自定义注解枚举值校验

自定义注解枚举值校验

时间:2024-06-19 17:11:22浏览次数:27  
标签:enumClass 自定义 校验 value 枚举 EnumListValidService return public

自定义注解枚举值校验

1. 定义注解
@Constraint(validatedBy = InEnumConstraintValidator.class)
@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InEnum {

	/**
	 * 提示的message
	 * @return message
	 */
	String message() default "类型传入错误";

	/**
	 * 用于校验的枚举
	 */
	Class<? extends Enum<?>> enumClass();

	Class<?>[] groups() default { };

	Class<? extends Payload>[] payload() default { };
}
2 定义枚举接口
public interface EnumListValidService<T> {
    /**
     * 枚举存在
     *
     * @param value
     * @return
     */
    boolean exist(T value);
}
3.定义实现
public class InEnumConstraintValidator implements ConstraintValidator<InEnum, Object> {

    private Class<? extends Enum> enumClass;

    @Override
    public void initialize(InEnum constraintAnnotation) {
        enumClass = constraintAnnotation.enumClass();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
        Enum[] enumConstants = enumClass.getEnumConstants();
        if (ArrayUtil.isEmpty(enumConstants)) {
            return true;
        }
        Enum enumConstant = enumConstants[0];
        boolean isImpl = enumConstant instanceof EnumListValidService;
        if(!isImpl){
            ServiceException.throwException(enumClass.getSimpleName()+"未实现接口EnumListValidService");
        }
        EnumListValidService enumListValidService = (EnumListValidService) enumConstant;
        return enumListValidService.exist(value);
    }
}
4. 使用
@AllArgsConstructor
@Getter
public enum  SpecsActivityTypeEnum implements EnumListValidService<Integer> {
    FIRST_ORDER(1,"首单优惠"),
    LIMITED_TIME(2,"限时买一赠一"),
    PURCHASE_LIMIT(3,"限购");

    private Integer code;

    private String desc;

    @Override
    public boolean exist(Integer value) {
        Set<Integer> sets = Arrays.stream(SpecsActivityTypeEnum.values())
                .map(SpecsActivityTypeEnum::getCode)
                .collect(Collectors.toSet());
        return sets.contains(value);
    }
}

 

标签:enumClass,自定义,校验,value,枚举,EnumListValidService,return,public
From: https://www.cnblogs.com/lyc88/p/18256649

相关文章

  • 在检视器Inspector中通过自定义属性实现显示中文名称
    在前人的基础上,整出来了一些完善一些的版本首先,在\Scripts下创建一个类CustomLabelAttribute usingSystem;usingUnityEngine;#ifUNITY_EDITOR[AttributeUsage(AttributeTargets.Field)]#endif///<summary>///使字段在Inspector中显示自定义的名称。///</summ......
  • react 自定义鼠标右键点击事件
    功能:鼠标右键点击节点时,出现“复制”功能,点击其他部位,隐藏“复制”;鼠标右键事件的文案,始终在鼠标点击位置的右下方;点击复制,提示复制成功效果图:代码:const[showRight,setShowRight]=useState(false);constcontextMenu=useRef(null);const[clickX,setClickX]=us......
  • 【踩坑】.NET 8.0 自定义IExceptionHandler不生效
    中间件实现异常处理在ASP.NETCore里,我们可以使用中间件(Middleware)实现全局的异常处理。如内置的异常处理中间件UseExceptionHandlerapp.UseExceptionHandler(appError=>{appError.Run(asynccontext=>{context.Resp......
  • 非接触式DIC测量技术在位移精度校验中的现场操作演示
    数字图像相关(DIC)方法是一种非接触、非干涉的全场变形测量方法,也是实验力学领域发展起来的最为成功的测量方法之一,并已经从实验室走向了工程应用。无论是高校/科研机构,还是试验机厂商,对于测试的精度、稳定性都有着严苛的要求。很多客户在选购新拓三维DIC测量系统前,都要对其进行......
  • 前后端 int类型和枚举的转换
    查询标签列表在LabelController中增加如下内容@Operation(summary="(根据类型)查询标签列表")@GetMapping("list")publicResult<List<LabelInfo>>labelList(@RequestParam(required=false)ItemTypetype){LambdaQueryWrapper<LabelInfo>quer......
  • Qt 应用程序中自定义鼠标光标
    在Qt应用程序中,你可以自定义鼠标光标。你可以使用`QCursor`类来设置不同类型的鼠标光标,比如内置样式或者自定义的图片。以下是一些使用示例:使用内置光标样式Qt提供了一些内置的光标样式,你可以使用这些样式来改变光标的外观,例如箭头、手形、等待图标等等。1#include<QA......
  • 20、docker-自定义网络
    查看所有的docker网络 网络模式:·bridge桥接(docker默认、自己定义也使用桥接模式)·none  不配置网络·host和宿主机共享网络·container容器网络连通(用的少) ================================================================......
  • React中AntDesign upload组件 自定义请求将多个上传请求合并成一个并
    接口文档核心代码constImportPictureUpload=()=>{const[fileList,setFileList]=useState([])constonBeforeUpload=(file:any,fileList:any)=>{setFileList(fileList)returnfalse;}useEffect(()=>{if(......
  • 5 个 JavaScript 自定义的实用函数
    嘿!......
  • 【iOS】自定义cell及其复用机制
    文章目录cell的复用注册非注册两者的区别自定义cellcell的复用当用户滚动UITableView或UICollectionView时,只有少量可见的cell会被实际创建和显示。对于那些暂时不可见的cell,系统会将它们缓存起来以备将来复用。这就是所谓的cell复用机制。为什么需要......