有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JAXRS客户端:ResponseProcessingException处理

一些重载的调用请求方法,例如:get()post(Entity<?> entity)(还有其他方法)^{}返回Response对象,而不是未编组的内容

我注意到在^{}的情况下,没有记录的^{},而其他方法,比如所有3个重载的^{}方法,可能抛出一个ResponseProcessingException

我知道ResponseProcessingException是从^{}继承的RuntimeException,但我仍然认为这意味着get()方法不会抛出ResponseProcessingException

这是正确的吗?那^{}呢?为什么该行为与其他调用请求方法(putpost,…)的行为不同

另外,抛出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

这是副本吗&;粘贴文档错误

不过,我想过滤器是一个有效的例子


共 (2) 个答案

  1. # 1 楼答案

    文件显然不一致。显然ResponseProcessingException是在ClientResponseFilter失败时抛出的

    我正在研究的实现(RESTEasy 3.0.16)实现了以下功能:

    try {
        filter.filter(requestContext, responseContext);
    } catch (ResponseProcessingException e) {
        throw e;
    } catch (Throwable e) {
        throw new ResponseProcessingException(response, e);
    }
    

    putpost方法声明异常时,get方法没有理由不声明异常。在内部,它们都由相同的代码处理

    我的结论是,两种方法在文档方面的细微差异只是一种疏忽

    有趣的是,在我的源代码副本中,get()方法的javadoc中有这样一行:

    /**
     * @throws javax.ws.rs.ProcessingException
     *          in case the invocation processing has failed.
    

    而所有其他类似的方法(例如get(Class<T>))都是这样记录的:

    /**
     * @throws ProcessingException         in case the request processing or subsequent I/O operation fails.
    

    吸引我注意的是第一个完全限定的类名。只是一种预感,但这让我觉得它是在不同的时间或由不同的人提出的。也许我分析过度了。我试图查看修订历史记录,但我发现只有一个提交,上面写着“将源代码移动到自己的存储库”)。到此为止

    然而,正如您所指出的,这并不是一个错误,因为ResponseProcessingExceptionProcessingException的一个子类,甚至不是一个已检查的异常

  2. # 2 楼答案

    如果不希望将异常包装在ResponseProcessingException中,可以让异常扩展它,那么它将不进行包装。当然,只有当您使用自己的异常并且对RuntimeException没有问题时,这才是可行的