我正在尝试从对象获取一些数据。我有一小段代码,其中:
UserAccessValidator
只是一个验证器,方法validateAccessToAccount
接受一个Long
,并且在未授予访问权限时抛出异常。就这么简单。
userAccessValidator.validateAccessToAccount(
peripheralRepository.findById(peripheralId)
.ifPresentOrElse(p -> p.getAccount().getId(),
() -> {throw new NotFoundException(Peripheral.class);}));
它没有编译,我得到的信息是Long
是必需的,但提供的是无效的。
如何修复这段代码使其正常工作?我想获得帐户ID,但我不知道该如何实现...非常详细的解释将不胜感激;)
答案 0 :(得分:1)
ifPresentOrElse()
具有void返回类型,因此不适合返回值。
使用map
将Optional
内部的值映射到所需的帐户ID。这将返回另一个Optional
。
然后,您可以调用orElseThrow
,如果Optional
为空,则会抛出异常,如果不是,则返回存储在该Optional
中的值。
userAccessValidator.validateAccessToAccount(
peripheralRepository.findById(peripheralId)
.map(p -> p.getAccount().getId())
.orElseThrow (() -> {throw new NotFoundException(Peripheral.class);});