Dropwizard异常映射

时间:2017-02-06 10:17:26

标签: java exception-handling dropwizard

我创建了两个ExceptionMappers:

GenericExceptionMapper implements ExceptionMapper<Throwable>

ValidationExceptionMapper implements ExceptionMapper<javax.validation.ValidationException>

GenericExceptionMapper检查Exception是否属于特定类型,如果是,则将完成某些映射。在所有其他情况下,它将映射到500。

ValdiationExceptionMapper将映射到具有特定响应的400。

现在我正在观察几件奇怪的事情。如果省略ValidationExceptionMapper,则不会调用GenericExceptionMapper。此外,如果我切断数据库连接,将触发非ExceptionMappers。在这两种情况下,响应都是500 html格式。我真正想要的是映射器应该捕获每个异常。

我正在使用Dropwizard 1.0.5并设置registerDefaultExceptionMappers: false

1 个答案:

答案 0 :(得分:0)

首先,我认为为资源设置@Singleton并不是一个好主意。

另一方面: 这是通过实现 ExtendedExceptionMapper

来定制针对特定异常的响应的正确方法:
environment.jersey().register(new ExtendedExceptionMapper<WebApplicationException>() {
@Override
public Response toResponse(WebApplicationException exception) {
    return Response.status(Response.Status.NOT_FOUND).build();
}

@Override
public boolean isMappable(WebApplicationException e) {
    return Throwables.getRootCause(e).getClass() == MustacheNotFoundException.class;
}});

Dropwizard docs, Templates errors section