Java WebApplicationException与响应

Java WebApplicationException与响应,java,rest,jersey,jax-rs,Java,Rest,Jersey,Jax Rs,在REST服务中向客户端返回响应的所有可能性中,我看到了两种看起来相当的可能性:抛出WebApplicationException(可能使用响应实例)或返回响应实例 既然结果相同,为什么要使用一种可能性而不是另一种?这是否与所使用的REST框架有关,该框架可能被配置为在异常和常规响应之间做出不同的反应 既然结果相同,为什么要使用一种可能性而不是另一种 也许是因为作为(Java)程序员,当应用程序的特定规则被破坏时,您习惯于抛出异常?将某些字符串转换为数字,您可能会得到一个NumberFormat

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

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

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

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

当您无法返回常规响应时,必须向客户端返回错误响应。您可以通过引发异常或手动生成响应来执行此操作。这对于客户端是一样的,但对于服务器端代码则不同

抛出异常会使您的代码更干净、更容易推理,从而更容易理解。其思想是对异常进行子类化,并从中创建您自己有意义的异常(例如
ProductNotFoundException Extended WebApplicationException{…}
AccessDeniedException Extended WebApplicationException{…}
或使用一个实例重用异常)


然后抛出新的ProductNotFoundException()
抛出新的AccessDeniedException()会更干净
并让框架来处理它,而不是每次都构建一个,然后按照用于构建它的详细信息来确定代码部分中发生了什么。

我认为
WebApplicationException
是针对失败案例而不是成功案例的。如果你有一个通常会返回的方法(比如)成功案例中的JAXB对象抛出一个
WebApplicationException
提供了一种在失败案例中返回其他类型数据的方法。但是如果在成功案例中声明该方法返回
Response
,那么就不需要使用异常方法。请查看.
WebApplicationException
。要想成功,请始终使用
Response
@IanRoberts我理解这样一个事实:一个通常用于失败,另一个用于成功场景。但我的问题更具技术性,即,如果是异常或错误,框架对响应的解释或处理方式是否存在差异古拉格回应?(我添加了球衣标签)@LutzHorn对于成功,我不使用异常,因为这是违反直觉的,尽管它可以工作。但是对于失败,有一个选择。引发异常还有另一个原因:如果您使用的是事务,它允许容器回滚您以前在该请求中对数据所做的任何更改。如果您只是返回一个规则r响应,您需要自己处理。什么是“让框架来处理它”?您有什么文章我可以参考它的工作原理吗?谢谢。@缓存:提及应该如何处理WebApplicationException。您甚至可以注册异常映射提供程序,也在规范中描述。