Jersey Dropwizard中的两个异常映射器

Jersey Dropwizard中的两个异常映射器,jersey,dropwizard,Jersey,Dropwizard,我有带Dropwizard服务的父pom。在该服务中,我有一些异常映射器声明,例如: @Provider class ExceptionMapperForClassA {...} public abstract class BaseExceptionMapper<T extends Exception> extends LoggingExceptionMapper<T> { ... } 现在,在我的子pom中,我扩展了这个父服务,我想为

我有带Dropwizard服务的父pom。在该服务中,我有一些异常映射器声明,例如:

@Provider
class ExceptionMapperForClassA {...}
    public abstract class BaseExceptionMapper<T extends Exception> extends LoggingExceptionMapper<T> {
        ...
    }
现在,在我的子pom中,我扩展了这个父服务,我想为ClassA创建新的异常映射器,我想从ExceptionApperForClassA扩展它

我在Jersey文档中找不到任何信息,该文档描述了在声明同一类的两个异常映射器时Jersey的行为


实际上,问题是-如何覆盖某些异常映射程序并确保只调用我的异常映射程序?

我运行了一个快速测试,其行为如下:

如果有两个异常映射器映射同一个异常,则按名称排序的提供程序将是调用的提供程序。例如,我有一个ResourceNotFound映射器,我用TestMapper扩展它。后者从未被称为。 如果将后者重命名为ATestMapper,则永远不会调用第一个

然而,我不会依赖这种行为,因为我认为它在任何地方都没有定义(我可能错了)

如果要覆盖ExceptionMappers,我建议创建一个通用的基,例如:

@Provider
class ExceptionMapperForClassA {...}
    public abstract class BaseExceptionMapper<T extends Exception> extends LoggingExceptionMapper<T> {
        ...
    }

这将显式地将此映射器设置为要使用的异常映射器。

除非已更改,否则无法覆盖现有的异常映射器。我不记得我在哪里读过,但上面说如果你注册了多个,你会随机选择一个映射器响应

建议,您需要取消注册以前的异常映射程序并分配您的异常映射程序,但在dropwizard 0.8之后,这也是不可能的。除非0.9提供了一个解决方案,否则您应该专注于让您的父pom从外部获取一个参数,并决定是否注册该
异常ApperForClassa