Java實現(xiàn)自定義枚舉值校驗器的示例代碼
前言
定義一個枚舉類,現(xiàn)需要對傳入的枚舉值進行范圍校驗。
@Getter
public enum UserTypeEnum {
STUDENT(“1”, "學生"),
TEACHER(“2”, "老師");
private Integer code;
private String name;
UserTypeEnum(Integer code, String name) {
this.code = code;
this.name = name;
}
}當超出范圍時,報錯。
注解校驗
@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("處理枚舉校驗異常:{}", 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);
}
}使用
在實體類的屬性上加入注解
@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灒枰陬惿霞尤?code>@Validated注解。
他拋出的異常為ConstraintViolationException,
最后,加入一個全局異常處理器處理異常。
除了自定義的注解,還有常規(guī)的注解校驗器

到此這篇關于Java實現(xiàn)自定義枚舉值校驗器的示例代碼的文章就介紹到這了,更多相關Java枚舉值校驗器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot2 實現(xiàn)JPA分頁和排序分頁的案例
這篇文章主要介紹了SpringBoot2 實現(xiàn)JPA分頁和排序分頁的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
SpringBoot使用Thymeleaf模板引擎訪問靜態(tài)html的過程
這篇文章主要介紹了SpringBoot使用Thymeleaf模板引擎訪問靜態(tài)html的過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
HttpClient HttpRoutePlanner接口確定請求目標路由
這篇文章主要為大家介紹了使用HttpClient HttpRoutePlanner接口確定請求目標路由,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10

