Spring MVC - 服务应该返回Optional还是抛出异常?

3

我在我的ProductDao类中有一个方法Optional<Product> findProduct(long productId)

  • 我的服务类(ProductService)应该传播Optional并返回Optional<Product>,然后Controller检查是否缺失吗?
  • 或者,我的服务类应该检查Optional是否不存在,并抛出ProductNotFoundException异常吗?

我使用@ControllerAdvice@ExceptionHandler来处理ProductNotFoundException并返回正确的View。所以我的异常将在两种解决方案中被正确处理。

1个回答

0

Optional并不是为了处理异常而设计的,它的目的是在不中断程序流程的情况下处理可能为空的对象。

你可以在服务类中这样做:

optional.orElseThrow(() -> new RuntimeException("ProductNotFoundException"));

这基本上意味着“如果可选值不可用,则返回我的可选值,但抛出异常”。

Optional 的标准 if-else 的好快捷方式。我以前不知道这个。回到我的问题,如果我理解正确,您建议在服务类中抛出异常,而不是在控制器中抛出? - AppiDevo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接