java JAXRS客户端:ResponseProcessingException处理
一些重载的调用请求方法,例如:get()
和post(Entity<?> entity)
(还有其他方法)^{Response
对象,而不是未编组的内容
我注意到在^{ResponseProcessingException
我知道ResponseProcessingException
是从^{RuntimeException
,但我仍然认为这意味着get()
方法不会抛出ResponseProcessingException
这是正确的吗?那^{put
,post
,…)的行为不同
另外,抛出ResponseProcessingException
的方法的Javadoc说:
in case processing of a received HTTP response fails (e.g. in a filter or during conversion of the response entity data to an instance of a particular Java type).
该部分:
or during conversion of the response entity data to an instance of a particular Java type
这里似乎是错误的,因为不应该调用readEntity
方法:
https://jersey.java.net/documentation/latest/filters-and-interceptors.html#d0e9915
这是副本吗&;粘贴文档错误
不过,我想过滤器是一个有效的例子
# 1 楼答案
文件显然不一致。显然
ResponseProcessingException
是在ClientResponseFilter
失败时抛出的我正在研究的实现(RESTEasy 3.0.16)实现了以下功能:
当
put
和post
方法声明异常时,get
方法没有理由不声明异常。在内部,它们都由相同的代码处理我的结论是,两种方法在文档方面的细微差异只是一种疏忽
有趣的是,在我的源代码副本中,
get()
方法的javadoc中有这样一行:而所有其他类似的方法(例如
get(Class<T>)
)都是这样记录的:吸引我注意的是第一个完全限定的类名。只是一种预感,但这让我觉得它是在不同的时间或由不同的人提出的。也许我分析过度了。我试图查看修订历史记录,但我发现只有一个提交,上面写着“将源代码移动到自己的存储库”)。到此为止
然而,正如您所指出的,这并不是一个错误,因为
ResponseProcessingException
是ProcessingException
的一个子类,甚至不是一个已检查的异常# 2 楼答案
如果不希望将异常包装在
ResponseProcessingException
中,可以让异常扩展它,那么它将不进行包装。当然,只有当您使用自己的异常并且对RuntimeException没有问题时,这才是可行的