java注解-入参校验(标注于单个参数上)
1、创建注解,添加属性,采用@Constraint(validatedBy = {IfInEnumValidator.class})绑定注解实现类。
例:枚举校验
package com.yhsp.pay.model.aspect; import com.yhsp.pay.common.enums.basenum.BaseEnum; import com.yhsp.pay.model.aspect.impl.IfInEnumValidator; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; /** * @author guocz * @date 20211123 * 不为空判断是否在枚举中 */ @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = {IfInEnumValidator.class}) public @interface IfInEnum { String message() default "枚举值不正确"; Class<? extends BaseEnum> enumClass(); Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; }
2、创建注解实现类,实现ConstraintValidator
package com.yhsp.pay.model.aspect.impl; import com.yhsp.pay.common.enums.basenum.BaseEnum; import com.yhsp.pay.model.aspect.IfInEnum; import org.apache.commons.lang3.StringUtils; import org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorContextImpl; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; /** * @author guocz * @date 20211123 * 不为空判断是否在枚举中 */ public class IfInEnumValidator implements ConstraintValidator{ @Override public void initialize(IfInEnum constraintAnnotation) { } @Override public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) { if (StringUtils.isBlank(s)) { return true; } Class c = (Class) ((ConstraintValidatorContextImpl) constraintValidatorContext).getConstraintDescriptor().getAttributes().get("enumClass"); BaseEnum[] baseEnum = (BaseEnum[]) c.getEnumConstants(); for (BaseEnum e : baseEnum) { if (e.getKey().equals(s)) { return true; } } return false; } }