66476346 by chentao

no message

1 parent 1306678b
package com.lego.common.annotation;
/**
* @author chentao
* @date 2025/4/23
*/
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Constraint(validatedBy = AtLeastOneNonNullValidator.class)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AtLeastOneNonNull {
String message() default "At least one field must be non-null";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] fields(); // 指定需要校验的字段名数组
}
\ No newline at end of file
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
}
}
package com.lego.core.domin.bo;
import com.lego.common.annotation.AtLeastOneNonNull;
import lombok.Data;
import javax.validation.constraints.NotBlank;
......@@ -12,6 +13,7 @@ import javax.validation.constraints.Size;
* @date 2024/9/8 16:29
*/
@Data
@AtLeastOneNonNull(fields = {"twoDimensionalOssId", "threeDimensionalOssId"})
public class CourseBo extends BaseBO {
private static final long serialVersionUID = 1L;
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!