ExceptionMapper处理的异常的过滤/映射顺序是什么?

时间:2014-01-17 15:04:35

标签: java exception-handling jax-rs

进入我的申请表:

  • 1 CustomBusinessException(extends Exception)
  • 异常映射器A,用于异常类型“CustomBusinessException”
  • 异常类型'Exception'的异常映射器B

异常映射管理中是否有订单? 例如,如果出现以下情况:

  • 我的应用程序抛出一个CustomeBusinessException:由mapper A或B处理?
  • 我的应用程序抛出一个通用的异常(或任何其他扩展此类):由A或B处理?

1 个答案:

答案 0 :(得分:-2)

根据我的个人经验,Jersey将映射由任何 ExceptionMapper 实现指定的最具体的子类。

对于 CustomBusinessException ,使用的异常映射器应该是映射器A,因为映射器A特定于类类型。

对于通用例外,例如例外类或例外的任何其他子类,将使用映射器B.

随后,您可以让 CustomBusinessException 扩展 WebApplicationException ,如下所示:

public class CustomBusinessException extends WebApplicationException
{
  public CustomBusinessException() {        
     super(Response.status(Response.Status.INTERNAL_SERVER_ERROR).type(MediaType.TEXT_PLAIN).build());
  }
}

上面创建了一个由Jersey处理的响应,更容易被客户使用。