Skip to content

验证是否class的字段

定义注解

jav

/**
 * 验证是否class的字段
 *
 * @author zeng
 */

// 注解的作用目标(可以设置作用在类,方法等等)
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME) // 注解的保留策略(注解的生命周期)
@Documented
@Constraint(validatedBy = FieldNameValidator.class) // 不同之处:与注解关联的验证器
public @interface FieldName {
  /**
   * 类名称
   *
   * @return class
   */
  Class<?> value();

  /**
   * 注解验证不通过时输出的信息
   *
   * @return message
   */
  String message() default "不是class的字段";

  /**
   * 约束注解在验证时所属的组别
   *
   * @return groups
   */
  Class<?>[] groups() default {};

  /**
   * 约束注解的有效负载
   *
   * @return payload
   */
  Class<? extends Payload>[] payload() default {};
}

实现

java

package org.elsfs.cloud.common.validation.validator;

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.lang.reflect.Field;
import org.elsfs.cloud.common.validation.annotation.FieldName;

/** 字段名称 的验证器 */
public class FieldNameValidator implements ConstraintValidator<FieldName, String> {

  private Class<?> validationClass;

  @Override
  public void initialize(FieldName constraintAnnotation) {
    validationClass = constraintAnnotation.value();
  }

  @Override
  public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
    Field[] fields = validationClass.getDeclaredFields();
    for (Field field : fields) {
      if (field.getName().equals(s)) {
        return true;
      }
    }
    return false;
  }
}

使用

定义实体

java

package org.elsfs.cloud.system.api.co.qry;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import org.elsfs.cloud.common.validation.annotation.FieldName;
import org.elsfs.cloud.system.api.entity.SysUser;

/** 判断用户字段是否存在参数 */
@Data
@Schema(name = "判断用户字段是否存在参数")
public class UserValidationQry {
  /** 验证字段 */
  @FieldName(SysUser.class)
  private String validationField;

  /** 验证值 */
  @NotBlank private String value;
}
java
  @PostMapping("exist")
  @Operation(summary = "判断字段值是否存在", description = "判断字段值是否存在")
  public R<Void> exist(@RequestBody @Valid UserValidationQry qry) {
    return sysUserManager.exist(qry);
  }

版权声明