我创建了两个 ExceptionMappers:
GenericExceptionMapper implements ExceptionMapper<Throwable>
和
ValidationExceptionMapper implements ExceptionMapper<javax.validation.ValidationException>
GenericExceptionMapper 检查异常是否属于特定类型,如果是,将完成一些映射。在所有其他情况下,它将被映射到 500。
ValdiationExceptionMapper 将映射到具有特定响应的 400。
现在我正在观察一些奇怪的事情。如果我省略了 ValidationExceptionMapper,则不会调用 GenericExceptionMapper。此外,如果我切断数据库连接,将触发非异常映射器。在这两种情况下,响应都是 500 html 格式。我真正想要的是映射器应该捕获每个异常。
我正在使用带有设置registerDefaultExceptionMappers: false
的滴阀向导 1.0.5 .
首先,我不认为设置@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;
}});
删除向导文档,模板错误部分