Jersey中多ExceptionMapper优先级疑问:WebApplicationException由哪个处理?
JAX-RS ExceptionMapper 优先级问题解答
嘿,这个问题问得很精准!我来给你拆解清楚:
在JAX-RS的规范里,当存在多个ExceptionMapper可以匹配抛出的异常时,会优先选择泛型参数最具体的那个Mapper——简单说就是,哪个Mapper处理的异常类型和抛出的异常“血缘关系最近”,就用哪个。
回到你的场景:
- 你定义了
WebApplicationExceptionMapper,它负责处理WebApplicationException及其子类; - 另一个
GenericExceptionMapper负责处理所有Throwable类型(也就是所有异常和错误)。
当抛出WebApplicationException或者它的子类异常时,WebApplicationException是比Throwable具体得多的类型(毕竟WebApplicationException是RuntimeException的子类,而RuntimeException又继承自Throwable)。所以JAX-RS会优先匹配WebApplicationExceptionMapper,不会触发GenericExceptionMapper。
只有当抛出的异常不属于WebApplicationException体系时(比如自定义的普通Exception、Error类等),才会轮到GenericExceptionMapper来处理。
内容的提问来源于stack exchange,提问作者BAE
相关产品推荐
相关产品推荐

