为WebApplicationException配置自定义映射器的正确方法是什么?

fed*_*lov 3 exception-handling jersey dropwizard

我创建了实现implements ExceptionMapper<WebApplicationException>和注册它的类environment.addProvider(new WebApplicationExceptionMapper());.我的自定义映射器可以工作,但只适用于扩展的一些例外WebApplicationException.例如,它不起作用ConflictException,它也不适用于我的自定义异常与以下构造函数:

public ConflictException(URI location, Object entity) {
    super(Response.status(Response.Status.CONFLICT).location(location).entity(entity).build());
}
Run Code Online (Sandbox Code Playgroud)

如果我将删除它将工作super(Response.status.....这很奇怪,我无法解释这一点.我不确定是它Jersey还是Dropwizard行为.

为所有WebApplicationException子类和子类配置映射器的正确方法是什么?你能解释一下我遇到的问题吗?

aus*_*tin 5

可能有点太晚了,但发现这个有用.

对于0.8以上的dropwizard


在yaml配置中

server:
    registerDefaultExceptionMappers: false
Run Code Online (Sandbox Code Playgroud)

这将禁用DWs默认异常映射器,然后添加自己的异常映射器

// Register the custom ExceptionMapper(s)
    environment.jersey().register(new RestErrorsHandler());
Run Code Online (Sandbox Code Playgroud)

来源:github问题