如何使用spring存储库进行bean验证?

问题描述 投票:1回答:3

我正在尝试使用我的存储库界面,如下所示。

interface SomeRepository extends JpaRepository<Some, Long> {

   @org.springframework.lang.Nullable
   Some findByKey(
            @org.springframework.lang.NonNull
            @javax.validation.constraint.NotNull
            final String key);
}

我发现这些限制不能按预期工作。

@Test
void findByKeyWithNullKey() {
    repository.findByKey(null);
}

测试案例简单地通过了。

我怎样才能使它工作?

spring spring-data-jpa spring-data bean-validation
3个回答
5
投票

Spring JPA document说:

要为查询方法启用运行时检查可空性约束,需要使用Spring的@NonNullApi在包级别上激活非可空性。

您只需创建package-info.java文件并在文件中添加与其相关的包声明即可添加包注释。然后将此注释添加到包中,如下所示:

@org.springframework.lang.NonNullApi
package com.example;

1
投票

我建议你在spring框架中使用javax验证并假设你使用的是maven,所以你只需要包含下面的依赖项

<dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </dependency>

之后请尝试下面的代码

Some findByKey(
            @NotNull final String key);

1
投票

它粘贴代码时有效。当然,你需要在repo上使用@Repository并删除@javax.validation.constraint.NotNull,因为那不是你想要的。此外,您需要确保在pom中有正确的导入。我建议反过来,在包级别添加非null api,然后:

Rule findOneByExpression(@Nullable String expression);
ruleRepository.findOneByExpression(null);

如果它返回null,则看它失败。然后改变它:

@Nullable 
Rule findOneByExpression(@Nullable String expression);

它会通过。

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