首页 > 解决方案 > Java:当抛出异常并使用 ExceptionMapper 时,客户端会收到什么 REST 响应?

问题描述

我试图了解 ExceptionMapper 的工作原理。

假设我定义了一个 REST 服务,它返回扩展 BaseResponse 的 XYZResponse。我还定义了一个 ExceptionMapper,它返回一个扩展 BaseResponse 的 FailureResponse。

如果发生异常,客户端会收到什么响应?

客户端不应该能够期望总是得到一个 XYZResponse,因为它是在 REST 方法的签名中定义的?如果发生异常,客户端会收到一个 FailureResponse 吗?因此,客户端只能依赖始终接收 BaseResponse 吗?

更新

我测试过:

@Test
public void figureOutResponse()
{
    BaseResponse response = null;
  try
  {
     response = occurrenceExportResourceUT
           .getStatus(UUID.randomUUID(),4);
  }catch (Exception e)
  {
     System.out.println("Response: " + response);
     System.out.println("Message: " + e.getMessage());
  }
}

结果:

Response: null
Message: HTTP 404 Not Found

因此,FailureResponse 似乎从未收到过。那么 FailureResponse 有什么用呢?应该收到吗?结果是否意味着 ExceptionWrapper 设置不正确?

标签: javaexceptionmapper

解决方案


如果您使用异常映射器捕获异常,您可能希望设置一个合适的 http 状态代码以指示出现问题。然后你可以实现你的客户端来检查http状态码并解析相应的响应。(基本上,您制定了一个“合同”,对于 http 状态代码 xxx,您将返回 ResponseX,对于 http 状态代码 yyy,您将返回 ResponseY)


推荐阅读