自定义过滤标签
import org.apache.commons.beanutils.PropertyUtils;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 验证至少有一个不能为空
*
* @author admin
*/
@Target({TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = AtLeastOneNotNull.AtLeastOneNotNullValidator.class)
@Documented
public @interface AtLeastOneNotNull {
String message() default "at least one not null";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] fieldNames();
class AtLeastOneNotNullValidator implements ConstraintValidator<AtLeastOneNotNull, Object> {
private String[] fieldNames;
@Override
public void initialize(AtLeastOneNotNull constraintAnnotation) {
this.fieldNames = constraintAnnotation.fieldNames();
}
@Override
public boolean isValid(Object object, ConstraintValidatorContext constraintContext) {
if (object == null) {
return true;
}
try {
for (String fieldName : fieldNames) {
Object property = PropertyUtils.getProperty(object, fieldName);
if (property != null) return true;
}
return false;
} catch (Exception e) {
return false;
}
}
}
}
应用
@Data
@ToString(callSuper = true)
@AtLeastOneNotNull(fieldNames = {"telphone", "phone"}, message = "telphone,phone不能都为空")
public class User {
private String name;
/**
* 电话号码
*/
private String telphone;
/**
* 手机号码
*/
private String phone;
}
Validate至少有一个不能为空