Java 模型注释能否验证两个字段
我有这个模型课Java 模型注释能否验证两个字段,java,Java,我有这个模型课 @Document(collection = "MyClass") public class MyClass implements Persistable<UUID> { @NotEmpty(groups = { Create.class}) private String field1; @NotEmpty(groups = { Create.class}) private String field2; } 现在在创建过程中,我想
@Document(collection = "MyClass")
public class MyClass implements Persistable<UUID> {
@NotEmpty(groups = { Create.class})
private String field1;
@NotEmpty(groups = { Create.class})
private String field2;
}
现在在创建过程中,我想检查field1是否为空,field2是否为空,但两者都不应为空
我可以通过预先存在的注释或实现ConstraintValidator的自定义注释来实现这一点,或者我必须在我的服务层中进行验证您可以创建自定义注释,并使用该注释在create类中进行验证 自定义批注:
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomAnnotationValidator.class)
@Documented
public @interface CustomAnnotation {
String message() default "One of field1 or field2 required"; //can make use of properties file to interpolate message
String field1();
String field2();
}
然后在验证程序impl中:
public class CustomAnnotationValidator implements ConstraintValidator<CustomAnnotation, Object> {
private String field1Holder;
private String field2Holder;
@Override
public void initialize(CustomAnnotation constraintAnnotation) {
field1Holder = constraintAnnotation.field1();
field2Holder = constraintAnnotation.field2();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
try {
final String field1 = BeanUtils.getProperty(value, field1Holder);
final String field2 = BeanUtils.getProperty(value, field2Holder);
return !(field1 == null && field2 == null); //your validation logic
} catch (Exception e) {
log.error("Error validating object", e);
return false;
}
}
可以创建自定义类级别约束。
public class CustomAnnotationValidator implements ConstraintValidator<CustomAnnotation, Object> {
private String field1Holder;
private String field2Holder;
@Override
public void initialize(CustomAnnotation constraintAnnotation) {
field1Holder = constraintAnnotation.field1();
field2Holder = constraintAnnotation.field2();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
try {
final String field1 = BeanUtils.getProperty(value, field1Holder);
final String field2 = BeanUtils.getProperty(value, field2Holder);
return !(field1 == null && field2 == null); //your validation logic
} catch (Exception e) {
log.error("Error validating object", e);
return false;
}
}