Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模型注释能否验证两个字段_Java - Fatal编程技术网

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;
    }
}