我正在尝试使用我的存储库界面,如下所示。
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的@NonNullApi
在包级别上激活非可空性。
您只需创建package-info.java
文件并在文件中添加与其相关的包声明即可添加包注释。然后将此注释添加到包中,如下所示:
@org.springframework.lang.NonNullApi
package com.example;
我建议你在spring框架中使用javax验证并假设你使用的是maven,所以你只需要包含下面的依赖项
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
之后请尝试下面的代码
Some findByKey(
@NotNull final String key);
它粘贴代码时有效。当然,你需要在repo上使用@Repository并删除@javax.validation.constraint.NotNull,因为那不是你想要的。此外,您需要确保在pom中有正确的导入。我建议反过来,在包级别添加非null api,然后:
Rule findOneByExpression(@Nullable String expression);
ruleRepository.findOneByExpression(null);
如果它返回null,则看它失败。然后改变它:
@Nullable
Rule findOneByExpression(@Nullable String expression);
它会通过。