WebApplicationException vs Response

2022-09-01 12:09:36

REST服务中向客户端返回响应的所有可能性中,我看到了两种看起来等效的可能性:抛出(可能使用实例)或返回实例。WebApplicationExceptionResponseResponse

为什么使用一种可能性而不是另一种可能性,因为结果是相同的?这是否与所使用的 REST 框架有关,该框架可能配置为在异常和常规响应之间做出不同的反应?


答案 1

为什么使用一种可能性而不是另一种可能性,因为结果是相同的?

也许是因为作为一名(Java)程序员,你习惯于在应用程序的特定规则被破坏时抛出异常?将一些字符串转换为数字,您可能会得到一个,在数组中使用错误的索引,然后得到一个,访问您不允许访问的内容并得到一个等。您习惯于在无法创建“常规响应”时引发异常(无论是来自错误的输入还是某些处理错误)。NumberFormatExceptionArrayIndexOutOfBoundsExceptionSecurityException

如果无法返回常规响应,则必须向客户端返回错误响应。您可以通过抛出异常或手动构建响应来执行此操作。对于客户端来说,这是一回事,但对于服务器端代码来说,情况就不一样了。

抛出异常会使代码更清晰,更易于推理,因此更易于理解。这个想法是将 WebApplicationException 子类化,并从中创建你自己有意义的异常(例如,或者使用异常映射器重用异常)。ProductNotFoundException extends WebApplicationException { ... }AccessDeniedException extends WebApplicationException { ... }

然后,扔出新的ProductNotFoundException()新的AccessDeniedException()并让框架处理它,而不是每次都构建一个响应,然后按照用于构建它的细节来弄清楚该部分代码中发生了什么,这是更干净的。


答案 2