AtLeastOneNonNullValidator.java
1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.lego.common.annotation;
import com.lego.common.annotation.AtLeastOneNonNull;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* @author chentao
* @date 2025/4/23
*/
public class AtLeastOneNonNullValidator implements ConstraintValidator<AtLeastOneNonNull, Object> {
private List<String> fields;
@Override
public void initialize(AtLeastOneNonNull constraintAnnotation) {
fields = Arrays.asList(constraintAnnotation.fields());
}
@Override
public boolean isValid(Object object, ConstraintValidatorContext context) {
if (object == null) {
return false; // 如果对象本身为null,则不满足条件
}
for (String fieldName : fields) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true); // 设置私有字段可访问,以便读取值
if (Objects.nonNull(field.get(object))) { // 检查字段是否非空
return true; // 如果至少一个字段非空,返回true
}
} catch (NoSuchFieldException | IllegalAccessException e) {
// 处理异常,例如记录日志等
return false; // 出现异常时,保守起见返回false,实际中应更细致处理异常情况
}
}
return false; // 所有指定字段均为空或出现异常,返回false
}
}