javaee bean 验证@NotNull 不可继承

标签 java jakarta-ee bean-validation

我将此功能接口(interface)定义为:

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

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

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

最佳答案

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

javax.validation.constraints.@NotNull 是一个 JSR 验证,因此它应该包含在上面的答案中。如果没有,您可能可以尝试在该答案中进行评论。

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

您应该明白,上面答案中列出的这种特定行为是针对 Bean 验证注释处理器的,与 Java 中的通用注释继承无关。

只是偏离主题,但试图包含这些答案来理解 Java 中的注释继承,

Answer -1

Answer -2

Answer -3

Answer -4 Spring MVC Validations

只是为了说明,直到行 - Bar bar = foo.getBar(); 为止都没有错误消息,但是当我将其通过 validator 时,我收到消息 - 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()));


        }

    }

关于javaee bean 验证@NotNull 不可继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54218156/

相关文章:

java - 自定义 Bean 验证不起作用

java - 如何为 List 创建一个 ConstraintValidator

java - Neo4j 2.2.2 服务器在通过 java 代码生成数据库后不启动

java - 无法将 GeoPoint 转换为地址

java - 将 Servlet 链接到选项卡菜单

jakarta-ee - WildFly:如何使用嵌入式容器测试 EJB?

java - JPA的cascade=REMOVE和Hibernate的@OnDelete一起用?

java - 在 Java 调试器接口(interface) (JDI) 中调用静态方法

jakarta-ee - 声明对具有多个角色(包括)的用户的安全约束

java - 使用 bean 验证注释进行 jpa2 db 逆向工程