JAX-RS:将响应转换为异常

时间:2014-04-07 09:22:24

标签: java rest jax-rs

我正在使用JAX-RS客户端来使用REST API。我不想让JAX-RS抛出一堆异常,所以我自己正在检查Response对象。但有时候,我只关心 某些 状态代码,我希望JAX-RS 回退到默认行为并抛出一个实际异常(这将由AOP建议处理)。有一种简单的方法吗?

public void delete(long id) {
    Response response = client.delete(id);
    Response.Status status = Response.Status.fromStatusCode(response.getStatus());

    if (status == Response.Status.OK) {
        return;
    }
    if (status == Response.Status.NOT_FOUND) {
        throw new TeamNotFoundException();
    }
    if (status == Response.Status.CONFLICT) {
        throw new TeamHasAssignedUsersException();
    }

    // if status was internal server error or something similar, 
    // throw whatever exception you would throw at first place
    // magic.throwException(response)
}

1 个答案:

答案 0 :(得分:4)

JAX-RS API不支持将响应转换为异常。如果您检查JerseyInvocation.convertToException()方法,您会在Jersey看到它是一个简单的开关,它将Response状态转换为相应的异常。

所以,你有两个选择:

  1. 如果您期望实体,请致电webTarget.get(MyEntity.class)。当然,您可以在单个catch子句中捕获所有WebApplicationException,因为所有异常都会扩展它(例如,检查BadRequestException)。
  2. 或者你在代码中制作类似的switch子句,就像泽西制作的那样。