注:这是一个部分的答案,因为我还没有弄清楚所有的情况。
如果你从源头上看
JerseyInvocation
,您将看到方法
invoke(Class responseType)
,这是当我们让请求传递希望反序列化响应的类参数时调用的方法。这是你在这里使用的,通过
Product.class
target.path("123!").request(APPLICATION_JSON).get(Product.class);
正在查找
invoke()
方法,我们可以看到
return requestScope.runInScope(new Producer<T>() {
@Override
public T call() throws ProcessingException {
try {
return translate(runtime.invoke(requestForCall(requestContext)), requestScope, responseType);
} catch (final ProcessingException ex) {
if (ex.getCause() instanceof WebApplicationException) {
throw (WebApplicationException) ex.getCause();
}
throw ex;
}
}
});
这个
translate
方法是将异常包装在
ProcessingException
. 如果你看后面的几行
catch
,你应该看到我们的解决方案的机会。如果异常的原因是
WebApplicationException
,则将引发该异常。所以你的解决办法是
ShopException
延伸
Web应用程序异常
现在我说这只是一个部分的答案,因为当你只想要一个
Response
从请求中返回
Response res = target.path("123!").request(APPLICATION_JSON).get();
当你这样做的时候
invoke()
(no arguments)
被称为。它不像以前那样做
调用()
方法可以。所以如果你能搞清楚,你就有了完整的解决方案。
另一个解决方法是
处理例外
你自己再重新考虑一下原因。如果您正在制作一个sdk,那么这一切都将在用户不知情的情况下完成。