Javax @NotNull注释的使用

20

我有一个简单的方法,用于获取给定 companyId 的文档列表。以下是该方法:

@Override
public List<Documents> getDocumentList(@NotNull Integer companyId) {
    Company company = new Company(companyId);
    return this.documentRepository.findByCompany(company);
}

我想使用Javax验证约束以确保传递的companyId不为null。 但似乎没有任何效果,因为我能够传递一个null值,并且它会传递到存储库上的findByCompany调用中。 我还在@NotNull之前添加了@Valid以强制进行验证,但这也没有任何作用。

我可以编写几行代码来检查null值,但希望使用javax.validation注释使代码更易读和简洁。有办法让注释在方法参数上起作用吗?

4个回答

12

要激活参数验证,只需用@Validated对类进行注释即可。

import org.springframework.validation.annotation.Validated;

8
如果我不使用Spring,会怎样? - Anurag Awasthi
你可以使用来自Project Lombok的@NonNull注解(lombok.NonNull)。 - sisanared
添加更多的注释会对性能产生影响吗?因为在实际方法被调用之前添加了一个层。 - Ravik
@Validated的影响可以说是微乎其微。 - sisanared
这对我来说行不通。方法参数上的NotNull和类上的Validated。 - undefined

2

来自Java EE 6教程:

Bean验证模型通过放置在JavaBeans组件的字段、方法或类上的注释约束来进行支持,例如托管bean。

您应该将与已声明的bean相关的字段的验证放置在类似以下的位置:

@Entity
@Table(name="users")
public class BackgammonUser {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long userId;

    @Column(name="username")
    @NotBlank
    private String userName;

    @NotBlank
    private String password;

    @NotNull
    private Boolean enabled;
}

BackgammonUser 被认为是一个 bean。

1
我知道这个。我不想为单个参数创建一个bean。 - sisanared
那就是一种限制。你也可以在《Java EE 6 教程》中查找。 - Moshe Arad
1
谢谢。我想我还是必须自己手动编写空值检查 :) - sisanared
我们可以在实体类上使用@NotNull注解,而不是检查每个变量吗? - Rishi

0

如果你使用@Inject注入一个类到你的方法中,它会按照预期工作。

@Stateless
public class MyBean{ 
    @Inject
    TestClass test;
}

public class TestClass {
    public List<Documents> getDocumentList(@NotNull Integer companyId)
    {
        //...
    }
}

当您使用空参数调用方法时出现ConstraintViolationException

WFLYEJB0034: EJB Invocation failed on component MyBean for method ...:
javax.ejb.EJBException: javax.validation.ConstraintViolationException:
1 constraint violation(s) occurred during method validation.

-6

@NotNull 注解

  1. 方法不应返回 null。
  2. 变量(如字段、局部变量和参数)不能保存 null 值。

6
将一些常规编程提示作为回答下放并不会帮助任何人。此外,你的第二个声明令人困惑/不完整(如果按照原文意思写的话是错误的)。 - Sebastian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接