WebApplicationException与Response

Mic*_*che 26 java rest jax-rs jersey

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

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

Bog*_*dan 27

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

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

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

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

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

  • 抛出异常还有另一个原因:如果您正在使用事务,它允许容器回滚您之前对该请求中的数据所做的任何更改.如果您只是回复定期回复,您需要自己处理. (8认同)