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

时间:2014-01-31 14:07:00

标签: 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());
}

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

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

2 个答案:

答案 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/