Java實(shí)現(xiàn)自定義枚舉值校驗(yàn)器的示例代碼
前言
定義一個(gè)枚舉類,現(xiàn)需要對傳入的枚舉值進(jìn)行范圍校驗(yàn)。
@Getter
public enum UserTypeEnum {
STUDENT(“1”, "學(xué)生"),
TEACHER(“2”, "老師");
private Integer code;
private String name;
UserTypeEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
}當(dāng)超出范圍時(shí),報(bào)錯(cuò)。
注解校驗(yàn)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
@Constraint(validatedBy = EnumValidatorHandler.class)
public @interface EnumValidator {
Class<?> value();
String message() default "入?yún)⒅挡辉谡_枚舉中";
String method() default "getCode";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}@Slf4j
class EnumValidatorHandler implements ConstraintValidator<EnumValidator, Object> {
private List<Object> values = new ArrayList<>();
@Override
public void initialize(EnumValidator enumValidator) {
Class<?> clazz = enumValidator.value();
Object[] objects = clazz.getEnumConstants();
try {
Method method = clazz.getMethod(enumValidator.method());
Object value;
for (Object obj : objects) {
value = method.invoke(obj);
values.add(value);
}
} catch (Exception e) {
log.error("處理枚舉校驗(yàn)異常:{}", e);
}
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
if (value instanceof String) {
String valueStr = (String)value;
return StringUtils.isEmpty(valueStr)|| values.contains(value);
}
return Objects.isNull(value) || values.contains(value);
}
}使用
在實(shí)體類的屬性上加入注解
@Entity
public class User {
@EnumValidator(value = UserTypeEnum.class)
private String userType;
}在c層入?yún)⒌膮?shù)上加入@Valid注解
public User add(@Valid User user) {
}如果是其他層的入?yún)⑿r?yàn),需要所在類上加入@Validated注解。
他拋出的異常為ConstraintViolationException,
最后,加入一個(gè)全局異常處理器處理異常。
除了自定義的注解,還有常規(guī)的注解校驗(yàn)器

到此這篇關(guān)于Java實(shí)現(xiàn)自定義枚舉值校驗(yàn)器的示例代碼的文章就介紹到這了,更多相關(guān)Java枚舉值校驗(yàn)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
記錄一次connection reset 錯(cuò)誤的解決全過程
這篇文章主要介紹了記錄一次connection reset 錯(cuò)誤的解決全過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
SpringBoot2 實(shí)現(xiàn)JPA分頁和排序分頁的案例
這篇文章主要介紹了SpringBoot2 實(shí)現(xiàn)JPA分頁和排序分頁的案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Spring通過配置文件和注解實(shí)現(xiàn)屬性賦值
這篇文章主要介紹了Spring通過配置文件和注解實(shí)現(xiàn)屬性賦值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
SpringBoot使用Thymeleaf模板引擎訪問靜態(tài)html的過程
這篇文章主要介紹了SpringBoot使用Thymeleaf模板引擎訪問靜態(tài)html的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
HttpClient HttpRoutePlanner接口確定請求目標(biāo)路由
這篇文章主要為大家介紹了使用HttpClient HttpRoutePlanner接口確定請求目標(biāo)路由,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
java實(shí)現(xiàn)上傳圖片進(jìn)行切割的方法
這篇文章主要介紹了java實(shí)現(xiàn)上傳圖片進(jìn)行切割的方法,以完整實(shí)例形式分析了Java針對上傳圖片進(jìn)行切割的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02

