我可以验证 Spring 数据存储库中的自定义方法输入吗?

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

我想在 Spring Data JDBC 存储库中添加一个自定义方法,该方法应该获取一个字符串作为参数,我想检查该字符串是否映射到枚举的值,如果不可能,则抛出异常。

这将是未经验证的自定义方法:

@Repository
public interface RunRepository extends ListCrudRepository<Run,Integer> {

  @Query("SELECT * FROM Run WHERE location = :location")
  List<Run> findAllByLocation(String location);

}

我的解决方案是 将自定义方法从 RunRepository 接口移动到新的 RunRepositoryCustom 接口,然后为其编写一个实现,在其中验证值,并在必要时使用 jdbcTemplate 服务执行查询。

虽然我的解决方案有效,但我最终添加了相当多的文件并编写了自己的自定义方法的实现。

有没有一种方法可以根据某些自定义代码验证自定义方法输入,同时使用 @Query 装饰器坚持声明性 Spring Data 方式?

换句话说,是否有一个注释可以让我为方法输入提供验证功能?

我应该将验证移至控制器并让存储库输出纯数据库查询结果吗?

java spring spring-data spring-data-jdbc
1个回答
0
投票

换句话说,是否有一个注释可以让我为方法输入提供验证功能?

不,没有专门的注释来执行此操作。 但是您可以(ab)使用 SpEL 来实现此目的:创建一个方法,该方法将要验证的值作为输入,并在有效时返回原样,否则抛出异常并在查询的 SpEL 表达式中使用该方法。

已经有一个关于如何调用SpEL表达式中的方法的问题。

我应该将验证移至控制器并让存储库输出纯数据库查询结果吗?

我认为这是一个很好且重要的问题。

验证不应该在持久层中完成。 相反,您应该验证您的输入并将其转换为强域对象,这些对象不能通过构造而具有无效状态。

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