我正在尝试强制resteasy客户端抛出我自己的/自定义业务异常映射状态代码和实体作为响应。
我知道如何使用服务器端exception mappers映射我自己的状态代码的异常,但我不知道如何在客户端自动“取消映射”它们(当然有一些“取消映射”逻辑)得到适当的例外...
我知道客户端的异常映射是在ClientInvocation#handleErrorStatus中完成的。
问题是如何覆盖此默认行为?!
答案 0 :(得分:4)
您可以使用ClientResponseFilter拦截ClientInvocation:
@Provider
public class ClientErrorFilter implements ClientResponseFilter {
@Override
public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
if (responseContext.getStatus() == 404) {
throw new CustomNotFoundException();
}
}
}
缺点是您的异常将包含在ResponseProcessingException
:
Client client = ClientBuilder.newClient().register(ClientErrorFilter.class);
try {
client.target("http://stackoverflow.com/something-not-found").request().get();
} catch (ResponseProcessingException ex) {
CustomNotFoundException nfex = (CustomNotFoundException) ex.getCause();
}