客户端的异常映射

时间:2014-08-11 10:23:37

标签: java jboss resteasy

我正在尝试强制resteasy客户端抛出我自己的/自定义业务异常映射状态代码和实体作为响应。

我知道如何使用服务器端exception mappers映射我自己的状态代码的异常,但我不知道如何在客户端自动“取消映射”它们(当然有一些“取消映射”逻辑)得到适当的例外...

我知道客户端的异常映射是在ClientInvocation#handleErrorStatus中完成的。

问题是如何覆盖此默认行为?!

1 个答案:

答案 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();
}