/** * 工单状态,使用字典:order_item_state */ @CheckEnum(nullAble = true, enumType = OrderItemStateEnum.class) private String workState;
注解类
package com.gdyunst.core.tool.validation;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
/**
* 校验是否是状态枚举中的项
*/
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {CheckEnumValidation.class})
public @interface CheckEnum {
String message() default "请输入字典中的状态类型";
/**
* 是否可以为空,true可以为空,当配置true并且传的值也是空,那就不做校验
* @return
*/
boolean nullAble() default false;
/**
* 枚举类型
* @return
*/
Class enumType();
/**
* 枚举中的方法名称,get方法,如:getType
* @return
*/
String methodName() default "getType";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
配置类
package com.gdyunst.core.tool.validation;
import cn.hutool.core.util.StrUtil;
import com.gdyunst.core.tool.util.EnumUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* 参数必须是状态字典校验
*/
public class CheckEnumValidation implements ConstraintValidator<CheckEnum, String> {
/**
* 获取配置中是否为空
*/
private Class enumType;
private boolean nullAble;
private String methodName;
@Override
public void initialize(CheckEnum checkEnum) {
enumType = checkEnum.enumType();
nullAble = checkEnum.nullAble();
methodName = checkEnum.methodName();
}
/**
* 传递的字典类型参数值
* @param enumValue
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(String enumValue, ConstraintValidatorContext constraintValidatorContext) {
// 配置了允许为空并且该值也是空,那就不去校验格式
if (nullAble && StrUtil.isBlank(enumValue)) {
return true;
}
if(StrUtil.isBlank(enumValue)){
constraintValidatorContext.disableDefaultConstraintViolation();
constraintValidatorContext.buildConstraintViolationWithTemplate("请输入字典字段参数")
.addConstraintViolation();
return false;
}
if (StrUtil.isBlank(methodName)) {
constraintValidatorContext.disableDefaultConstraintViolation();
constraintValidatorContext.buildConstraintViolationWithTemplate("枚举中的字段必须配置")
.addConstraintViolation();
return false;
}
if (enumType == null) {
constraintValidatorContext.disableDefaultConstraintViolation();
constraintValidatorContext.buildConstraintViolationWithTemplate("枚举对象必须配置")
.addConstraintViolation();
return false;
}
Object stateEnum = EnumUtils.getEnumByLambda(enumValue, enumType, methodName);
if(stateEnum == null) {
constraintValidatorContext.disableDefaultConstraintViolation();
constraintValidatorContext.buildConstraintViolationWithTemplate(String.format("请输入系统字典: %s 中的枚举值", enumType.getSimpleName()))
.addConstraintViolation();
return false;
}
return true;
}
}