如何使用 spring 个存储库进行 bean 验证?
How can I do bean-validation with spring repositories?
我正在尝试使用我的存储库界面,如下所示。
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 框架中使用 javax 验证,假设您使用的是 Maven,那么您只需要包含以下依赖项
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
之后请尝试下面的代码
Some findByKey(
@NotNull final String key);
要为查询方法启用可空性约束的运行时检查,您需要使用 Spring 的 @NonNullApi
在包级别激活不可空性。
您可以简单地通过创建 package-info.java
文件并在 file.Then 中添加它相关的包声明来添加包注释,像这样将此注释添加到您的包中:
@org.springframework.lang.NonNullApi
package com.example;
它在您粘贴代码时起作用。当然,您需要在 repo 上使用 @Repository 并删除 @javax.validation.constraint.NotNull 因为这不是您想要的。此外,您需要确保在 pom.xml 中有正确的导入。
我建议做相反的事情,在包级别添加非空 api,然后:
Rule findOneByExpression(@Nullable String expression);
ruleRepository.findOneByExpression(null);
如果它 returns 为空,则看到它失败了。然后像这样更改它:
@Nullable
Rule findOneByExpression(@Nullable String expression);
它会过去的。
我正在尝试使用我的存储库界面,如下所示。
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 框架中使用 javax 验证,假设您使用的是 Maven,那么您只需要包含以下依赖项
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
之后请尝试下面的代码
Some findByKey(
@NotNull final String key);
要为查询方法启用可空性约束的运行时检查,您需要使用 Spring 的 @NonNullApi
在包级别激活不可空性。
您可以简单地通过创建 package-info.java
文件并在 file.Then 中添加它相关的包声明来添加包注释,像这样将此注释添加到您的包中:
@org.springframework.lang.NonNullApi
package com.example;
它在您粘贴代码时起作用。当然,您需要在 repo 上使用 @Repository 并删除 @javax.validation.constraint.NotNull 因为这不是您想要的。此外,您需要确保在 pom.xml 中有正确的导入。 我建议做相反的事情,在包级别添加非空 api,然后:
Rule findOneByExpression(@Nullable String expression);
ruleRepository.findOneByExpression(null);
如果它 returns 为空,则看到它失败了。然后像这样更改它:
@Nullable
Rule findOneByExpression(@Nullable String expression);
它会过去的。