29

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

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

4

1 回答 1

30

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

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

当您无法返回常规响应时,您必须向客户端返回错误响应。您可以通过抛出异常或手动构建响应来做到这一点。对于您的客户端来说是同样的事情,但对于您的服务器端代码来说却是不同的事情。

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

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

于 2013-01-01T20:59:03.240 回答