Java SpringMVC-服务应该返回可选的还是引发异常?

Java SpringMVC-服务应该返回可选的还是引发异常?,java,spring,spring-mvc,Java,Spring,Spring Mvc,在我的ProductDao类中有方法可选的findProduct(long productId) 我的服务类(ProductService)是否应该传播Optional并返回Optional,然后Controller检查是否不存在 或者我的服务类应该检查Optional是否不存在,并抛出ProductNotFoundException 我使用@ControllerAdvice和@ExceptionHandler处理ProductNotFoundException并返回正确的视图。因此,我的异

在我的
ProductDao
类中有方法
可选的findProduct(long productId)

  • 我的服务类(
    ProductService
    )是否应该传播
    Optional
    并返回
    Optional
    ,然后
    Controller
    检查是否不存在
  • 或者我的服务类应该检查
    Optional
    是否不存在,并抛出
    ProductNotFoundException

我使用
@ControllerAdvice
@ExceptionHandler
处理
ProductNotFoundException
并返回正确的
视图。因此,我的异常在这两种解决方案中都会得到正确处理。

Optional并非真正用于处理异常,而是用于在不中断程序流的情况下处理潜在的空值

你可以在服务课上做类似的事情

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

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

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