javaee bean验证@NotNull不可继承

时间:2019-01-16 13:29:57

标签: java java-ee bean-validation

我将这个功能接口定义为:

@java.lang.FunctionalInterface
interface Foo
{
    @javax.validation.constraints.NotNull Bar getBar()
}

这里的问题是,覆盖getBar()的子类型(lambdas,...)似乎不受不可为空约束的约束。

对此有哪些实际解决方案?

1 个答案:

答案 0 :(得分:0)

请准确,因为您的观察结果与公认的答案here直接冲突。 似乎不受限制不是很精确,要么是,要么不是。

javax.validation.constraints.@NotNull是一个JSR验证,因此它应包含在以上答案中。如果不是,则可能尝试在该答案中添加注释。

我建议发布您的驱动程序/设置,因为我怀疑jsr bean验证程序可能不会在您的实例化中被调用。

您应该理解,以上答案中列出的此特定行为非常特定于bean验证注释处理器,并且与Java中的常规注释继承无关。

只是一个话题,但试图包括这些答案以了解Java中的注释继承,

Answer -1

Answer -2

Answer -3

Answer -4 Spring MVC Validations

仅作说明,直到第-行Bar bar = foo.getBar();都没有错误消息,但是当我将其通过验证器时,对于父母和孩子,我都会得到消息-bar- may not be null

@java.lang.FunctionalInterface
public interface FooChild extends Foo {

}

和驱动程序

    import java.util.Set;

    import javax.validation.Configuration;
    import javax.validation.ConstraintViolation;
    import javax.validation.Validation;
    import javax.validation.Validator;
    import javax.validation.ValidatorFactory;

    public class DriverProgram {

        public static void main(String[] args) {
        Foo foo = () -> {
            return null;
        };

        Bar bar = foo.getBar();

        Configuration<?> config = Validation.byDefaultProvider().configure();
        ValidatorFactory factory = config.buildValidatorFactory();
        Validator validator = factory.getValidator();
        factory.close();

        Set<ConstraintViolation<Foo>> violations = validator.validate(foo);
        violations.forEach(v -> System.out.println(v.getPropertyPath() + "- " + v.getMessage()));
FooChild fooChild = () -> {
        return null;
    };

    bar = fooChild.getBar();

    violations = validator.validate(fooChild);
    violations.forEach(v -> System.out.println(v.getPropertyPath() + "- " + v.getMessage()));


        }

    }