java - Spring Data JPA findById() 方法返回 null 而不是 Empty 可选
问题描述
我有一个使用 Spring Data JPA 的 findById() 方法的方法应该返回一个 Optional。但是,如果指定的 id 没有找到实体,它会返回null而不是 Empty Optional。
public TicketEntity findTicket(String ticket) throws EntityNotFoundException {
Optional<TicketEntity> op = ticketEntityRepository.findById(ticket);
TicketEntity ticketEntity = op.orElseThrow(() -> new EntityNotFoundException("ticket with the id " + ticket + " not found in the system"));
return ticketEntity;
}
调试的时候发现op的值为null。这是一段失败的代码。我正在使用 Spring Data JPA 2.0.8.RELEASE。请帮忙
解决方案
在评论中,您声明这是在带有模拟依赖项的测试中。模拟将 Spring Data JPA 完全排除在外,因为它现在只是由Mockito的模拟实现的代理。
模拟的默认行为是返回null
。
默认情况下,对于所有返回值的方法,mock 将根据需要返回 null、原始/原始包装器值或空集合。例如 0 表示 int/Integer,false 表示 boolean/Boolean。
当您使用模拟运行时,您需要指示它返回Optional.empty()
您将得到的 else null
。
注意:您可能希望为 Mockito 创建一个改进请求,以在返回类型Optional.empty
的情况下默认返回。Optional
推荐阅读
- php - 试图了解这个/参数是如何工作的
- c++ - 遍历 C++ 中的所有目录和子目录
- java - 由于“JDK 不兼容”,无法创建 ADM 设备
- react-native - 如何在 React Native 中使用组件导航
- go - 如何为 grpc 添加静态(html,js)文件
- macos - 在 Mac 上编译 LaTex 文档时出现无效字体错误
- alexa-rank - 移动APP流量与网站同步(使用API)
- php - 每个目录和子目录中的可疑 .htaccess 文件
- c# - 正则表达式捕获引号内和带/不带空格的数字
- docker - 在 docker 容器中的 apache 中为 symfony 项目设置虚拟主机