EnumUtils重构及自定义@EnumValue注解自动校验枚举值_第1页
EnumUtils重构及自定义@EnumValue注解自动校验枚举值_第2页
EnumUtils重构及自定义@EnumValue注解自动校验枚举值_第3页
EnumUtils重构及自定义@EnumValue注解自动校验枚举值_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EnumUtils重构及自定^@EnumValue注解自动校验枚举值EnumUtils主要功能介绍该简单介绍可看笔者之前文章但以上该方式存在一些问题,例如枚举值(value)可能为String也可能为Byte等等,不止只是Integer类型,而且有些枚举可能不需要枚举名称(name)属性,只需要个枚举值value属性即可,以上最简单的实现方式就不支持这些需求了,故通过拆分BaseEnum接口以及增加泛型来支持该要求。具体实现BaseEnum接口拆分为ValueEnum以及NameValueEnum接口ValueEnum接口定义***最简单的枚举类,即只含value的枚举(实现此接口可使用{@linkmayfly.core.util.EnumUtils}中的方法)@authormeilin.huang@version1.0@date2019-04-2210:10*/publicinterfaceValueEnum<T>{/***获取枚举值*@return枚举值*/TgetValue();NameValueEnum接口定义*带有枚举值以及枚举名称的枚举接口(可使用{@linkmayfly.core.util.EnumUtils}中的方法)@authormeilin.huang@version1.0@date2019-03-2211:04AM*/publicinterfaceNameValueEnum<T>extendsValueEnum<T>{/***获取枚举名称*@return枚举名*/StringgetName();EnumUtils重构II/***枚举常用工具类。<br/>*使用该枚举工具类需要指定的枚举实现{@linkValueEnum}OR{@linkNameValueEnum}接口@authormeilin.huang@version1.0@date2019-03-2211:12AM*/publicfinalclassEnumUtils{/***判断枚举值是否存在于指定枚举数组中@paramenums枚举数组@paramvalue枚举值@return*/publicstatic<T>booleanisExist(ValueEnum<T>[]enums,Tvalue){if(value==null){returnfalse;}for(ValueEnum<T>e:enums){if(value.equals(e.getValue())){returntrue;}}returnfalse;}/***根据枚举值获取其对应的名字@paramenums枚举歹I」表@paramvalue枚举值@return枚举名称*/publicstatic<T>StringgetNameByValue(NameValueEnum<T>[]enums,Tvalue){if(value==null){return"";}for(NameValueEnume:enums){if(value.equals(e.getValue())){returne.getName();}}return"";}/***根据枚举名称获取对应的枚举值@paramenums枚举歹I」表@paramname枚举名@return枚举值*/publicstatic<T>TgetValueByName(NameValueEnum<T>[]enums,Stringname){if(StringUtils.isEmpty(name)){returnnull;}for(NameValueEnum<T>e:enums){if(name.equals(e.getName())){returne.getValue();}}returnnull;}II自定义nal注解对入参进行自动校验IIII通过hibernatevalidator自定义参数校验注解方式实现对入参为枚举类型的参数进行校验/***枚举值校验,即值只能是指定枚举类中的值@authormeilin.huang@version1.0@date2019-06-1910:32AM*/I@Target({ElementType.FIELD})pRetention(RetentionPolicy.RUNTIME)^DocumentedDConstraint(validatedBy=EnumValue.ValueEnumValidator.class)ublic@interfaceEnumValue{/***错误提示*/Stringmessage()default"枚举值错误";/***必须的属性*用于分组校验*/Class<?>[]groups()default{};Class<?extendsPayload>[]payload()default{};/***枚举类(必须实现{@linkEnumValue}接口的枚举)*/Class<?extendsEnum<?extendsEnumValue>>enumClass();classValueEnumValidatorimplementsConstraintValidatorvValueEnum,Object〉{privateClass<?extendsEnum<?extendsEnumValue>>enumClass;@Overridepublicvoidinitialize(ValueEnumvalueEnum){this.enumClass=valueEnum.enumClass();}@OverridepublicbooleanisValid(Objectvalue,ConstraintValidatorContextcontext){if(value==null){returntrue;}//转换为ValueEnum接口Enum<?extendsEnumValue>[]enums=enumClass.getEnumConstants();EnumValue[]enumValues=newEnumValue[enums.length];for(inti=0;i<enums.length;i++){enumValues[i]=(EnumValue)enums[i];}returnEnumUtils.isExist(enumValues,value)}}使用:enumStringEnumimplementsValueEnum<String>{S1("01"),S2("02");privateStringvalue;StringEnum(Stringvalue){this.value=value;publicStringgetValue(){returnthis.value;—Enumim_11(1),12(2);privateIntegervalue;IntegerEnum(Integervalue){this.value=value;publicIntegergetV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论