即在 Spring 存储库中的以下查询方法中,HTTP 请求不需要 a 或 b。是否可以在存储库级别强制执行这些参数?
我想明确向客户端公开的 API。目前,公开端点不接受任何参数 a、b、a&b。然而我只想暴露a&b。
List<Thing> findByBAndC(@Param(value="a") Long a,@Param(value="b") Long b);
最佳答案
不知道任何 Spring Data 方法可以做到这一点,但我自然而然地可以想到一些方法......
您可以使用自定义@Query,只有当两者都存在(“is not null”)时才会返回某些内容(如果足够的话)
您还可以(ab)使用 @PreAuthorize 的安全性来检查两个参数是否不为空,但这听起来很臭。
我能想到的最简单(也是最不臭)的方法可能是编写自己的Aspect
来包装该方法并抛出两个参数都不存在的异常...例如,创建您自己的自定义注释,将其放在您的方法之前,然后编写一个方面,例如(未测试):
@Around("@annotation(com.example.AllParametersRequired.class)")
public Object throwExceptionOnMissingParameters(ProceedingJoinPoint pjp) throws Throwable {
int nullCount = Arrays.stream(pjp.getArgs()).filter( o -> o == null).count();
if (nullCount > 0) throw new RuntimeException("Null is not allowed.);
return pjp.proceed();
}
您可能需要在那里进行一些实验,看看哪个切入点最适合您的情况,但我不明白为什么您不应该能够围绕 Spring Data 的存储库方法包装一个方面。无论如何,这里有一个 Spring AOP 文档的链接,如果您想这样做,它可能会有所帮助:Link
关于java - 在 Spring 存储库查询方法中,是否可以强制存在/需要参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37049767/