WebApplicationException与Response

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

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

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

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

如果无法返回常规响应,则必须向客户端返回错误响应。 您可以通过抛出exception或手动构建响应来实现此目的。 这对您的客户来说是一回事,但对于您的服务器端代码来说却不是一回事。

抛出exception会使您的代码更清晰,更容易推理,从而更容易理解 。 我们的想法是WebApplicationException并从中创建自己有意义的exception(例如, ProductNotFoundException extends WebApplicationException { ... }AccessDeniedException extends WebApplicationException { ... }或者使用exception映射器重用exception)。

然后throw new ProductNotFoundException()throw new AccessDeniedException()并让框架处理它而不是每次都构建一个Response ,然后按照用于构建它的细节来弄清楚代码部分中发生了什么。