假设我有一个Spring Data Repository方法。
Optional<Branch> findByName(@Nonnull final String name);
如果我发现此方法执行有任何价值,我的业务逻辑就会抛出异常。
例如,我可以这样做:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(bo -> !bo.isPresent())
.orElseThrow(NameNotAvailableException::new);
或另一种方式:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(Optional::isEmpty)
.orElseThrow(NameNotAvailableException::new);
我不确定在这种情况下使用过滤器是否合适,因为我的方法返回Optional<Branch>
没有清单。
似乎在JDK中,如果有ifPresentThrow()方法可用,那将达到我的目的。
是的,可以使用我不希望使用的命令式代码来编写此代码。所以我的问题是,是否可以实现PresentThrow()或以一种更好的方式以函数样式进行操作是一样的事情。预先感谢。
答案 0 :(得分:9)
您最好使用“存在”。
if (repository.existsByName(branchName)) {
throw ...
}
它更有用,因为它不会从db中检索对象,而只是对/错。
答案 1 :(得分:7)
您可以将ifPresent
与代码块一起使用以引发异常
branchRepository.findByName(branch.getName()).ifPresent(s -> {
throw new NameNotAvailableException();
});
或者一个简单的if
块看起来也更干净
if(branchRepository.findByName(branch.getName()).isPresent()) {
throw new NameNotAvailableException();
}
或者您可以创建一个方法来引发异常
public void throwException(Object str) {
throw new NameNotAvailableException();
}
然后调用它
branchRepository.findByName(branch.getName()).ifPresent(this::throwException);