验证是否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);
}