我正在使用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)
}
答案 0 :(得分:4)
JAX-RS API不支持将响应转换为异常。如果您检查JerseyInvocation.convertToException()方法,您会在Jersey看到它是一个简单的开关,它将Response
状态转换为相应的异常。
所以,你有两个选择:
webTarget.get(MyEntity.class)
。当然,您可以在单个catch子句中捕获所有WebApplicationException,因为所有异常都会扩展它(例如,检查BadRequestException)。