什么是约束点验证@Null?

问题描述 投票:15回答:2

我在list of available constraints包中检查javax.validation,我注意到有一个注释@Null强制该字段为空。

如果我已经知道它应该为null,我不明白将它添加到我的字段有什么意义。

例如,看看这个类:

public class MyClass{

    @NotNull
    private String myString1;

    @Null
    private String myString2;

    // getter setters...
}

@NotNull完全有道理。我不认为myString1是空的。但@Null使myString2无用。有一个字段应始终为null的重点是什么。

java-ee constraints bean-validation
2个回答
4
投票

您可能希望将@Null与“验证组”结合使用,仅在某些情况下验证空约束。

Good explanation and example on validation groups provided by Hibernate

您将验证组定义为简单接口

public interface FirstSave {}

然后在约束中使用它

public class MyClass {

    @Null(groups = FirstSave.class)
    private LocalDate lastUpdate;
}

然后,如果lastUpdate不是null,调用validator.validate(myClassInstance)将不会产生约束违规(使用默认组),但调用validator.validate(myClassInstance, FirstSave.class)将。

您还可以提供有关如何使用注释的自己的实现,即我已经看到验证方法使用@Null进行注释,其中null通过该方法返回意味着一切都正常。在后台可能有自定义实现,如果注释方法返回非null结果该怎么办,但我没有深入到代码...


-1
投票

引用this文档,这里是null注释的要求。

乍看之下,按照合同设计的方式对API规范使用空注释只意味着所有API方法的签名都应该完全注释,即除了像int这样的基本类型,每个参数和每个方法的返回类型都应该标记为@NonNull或@Nullable。因为这意味着要插入很多空注释,所以很高兴知道在设计良好的代码(特别是API方法)中,@ NonNull比@Nullable更频繁。因此,通过在包级别使用@NonNullByDefault批注将@NonNull声明为默认值,可以减少注释的数量。

然而,话虽如此,是的,你是对的,@ Null没有多大意义,并且在一个设计良好的代码中,@ NotNull更重要,更频繁。 @Null或@Nullable只是为了表示在这里需要空值,并且有助于防止调用者和被调用者对空值进行冗余检查。希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.