我创建了实现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());
}
如果我删除super(Response.status....
,它会有效。这很奇怪,我无法解释这一点。我不确定是Jersey
还是Dropwizard
行为。
为所有WebApplicationException
和子类配置映射器的正确方法是什么?你能解释一下我遇到的问题吗?
答案 0 :(得分:5)
可能有点太晚了,但发现这个有用。
用于dropwizard 0.8及以上
在yaml配置中
server:
registerDefaultExceptionMappers: false
这会禁用DW默认的异常映射器,然后添加自己的异常映射器
// Register the custom ExceptionMapper(s)
environment.jersey().register(new RestErrorsHandler());
来源:github issue
答案 1 :(得分:0)
这篇文章展示了如何创建自定义的ExceptionMappers:
http://gary-rowe.com/agilestack/2012/10/23/how-to-implement-a-runtimeexceptionmapper-for-dropwizard/
如果您的自定义exceptionMappers出现问题,也许这篇文章也有帮助: http://thoughtspark.org/2013/02/25/dropwizard-and-jersey-exceptionmappers/