Javax验证@NotNull注释用法

时间:2017-04-28 02:15:05

标签: java spring spring-boot

我有一个简单的方法来获取给定companyId的文档列表。这是方法:

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

我想使用Javax验证约束来确保传入的companyId不是null。但它似乎没有任何影响,因为我能够传递null值,并且它会向下传递到存储库上的findByCompany调用。我还在@Valid之前添加了@NotNull来强制验证,但这也没有做任何事情。

我总是可以编写几行来检查null值,但希望使用javax.validation注释来使代码更具可读性和简洁性。有没有办法让注释适用于方法参数?

4 个答案:

答案 0 :(得分:6)

要激活参数验证,只需使用@Validated

注释该类
import org.springframework.validation.annotation.Validated;

答案 1 :(得分:1)

来自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。

答案 2 :(得分:0)

如果您使用您的方法@Inject一个类,它的工作正常。

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

public class TestClass {
    public List<Documents> getDocumentList(@NotNull Integer companyId)
    {
        //...
    }
}
使用null参数调用方法时

ConstraintViolationException

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

答案 3 :(得分:-1)

@NotNull Annotation,

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