0

我试图搜索这个,但我无法在任何地方找到解决方案。我真正想做的是我在云上实现了一项休息服务(第 3 方)。从我的应用程序中,我只实现了一个休息客户端(CXF 2.7.2),它在云上调用此服务并在返回对客户端的响应(主要是本机移动应用程序)之前进行一些处理。所以基本上它充当中间件。基本上,我想在中间件(rs-client)上实现一个通用的异常处理。服务实现(第 3 方)对我来说是一个黑匣子,我无法访问他们的代码。当我使用客户端使用服务时,有时会收到带有正确消息的响应 400(我最终会收到带有消息的 javax.ws.rs.BadRequestException,例如输入无效;有时在某些情况下我会收到 null作为回应。

我想要做的是处理所有可能的(无论如何我能想到的)这样的响应/代码情况,并将它们转换为自定义异常。除此之外,我还想处理其他情况,如超时等,并将这些也转换为自定义异常并将其返回以让用户使用此异常做他们想做的事情。此外,一路记录错误。我在各个地方看到可能使用句柄消息来处理它,但我无法实现完整的实现。

4

2 回答 2

0

您应该尝试使用Retrofit,它具有您正在寻找的错误处理功能,易于使用且轻量级的 REST 客户端库。

这是 1.x 版本的错误处理示例https://gist.github.com/benvium/66bf24e0de80d609dac0

相反,如果您被 JAX-RS/CXF 卡住,那么您需要获取响应对象并在那里进行检查。 http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-Handlingexceptions.1

于 2015-11-27T10:39:40.300 回答
0

你的问题可以有多种写出正确答案的方法。但是为了在第一步中帮助您,我为您提供了部分答案,我们可以在其中取得更多成果来解决您的问题。但请在您的问题中提供更多信息。


如果我以正确的方式理解您的问题,您可以执行以下操作:

  • 对于您问题的第一部分:

我想要做的是处理所有可能的(无论如何我能想到的)这样的响应/代码情况并将它们转换为自定义异常

如果response code is not a HTTP 200 status code你能抓住这个并抛出一个自定义异常。在您知道它不是 HTTP 200 状态代码之后,您可以选择如何处理状态代码。你可以:

  • 只需使用默认消息抛出自定义异常或
  • 您可以查找状态代码并根据状态代码抛出带有特定自定义消息的自定义异常。

简单的代码片段:

if(yourResponse.getStatus() != Response.Status.OK.getStatusCode()){
       throw new YourCustomException(yourResponse.getStatus() + " Your message");
   }

您的自定义异常类:

public class YourCustomException extends Exception {

    private static final long serialVersionUID = 5724760031556064083L;

    public YourCustomException(){
        super();
    }

    public YourCustomException(String message){
        super(message);
    }

    public YourCustomException(String message, Throwable cause){
        super(message, cause);
    }

    public YourCustomException(Throwable cause){
        super(cause);
    }

}
于 2015-11-25T09:34:54.227 回答