与实体一起抛出的 WebApplicationExceptions 的 ExceptionMapper?
ExceptionMapper for WebApplicationExceptions thrown with entity?
在我们的(遗留)代码库中,我们以不同的方式抛出 WebApplicationExceptions。
为了对我们处理异常的方式进行排序 - 我想为这些 WAE(和其他)创建一个 ExceptionMapper。
然而,我意识到 Jersey 的 ExceptionMapper 只映射未随实体一起抛出的 WAE。
例如:
throw new WebApplicationException(Response.status(500).build());
此异常被 ExceptionMapper 捕获。
throw new WebApplicationException(Response.status(500).entity(WsResourceUtils.createWSResourceRestError(500, "bla")).build());
ExceptionMapper 未捕获此异常。
两者都是从代码中的同一点抛出的。
这是我的 ExceptionMapper:
@Provider
public class GeneralExceptionMapper implements ExceptionMapper<Throwable> {
private static final Logger logger = LoggerFactory.getLogger(GeneralExceptionMapper.class);
@Override
public Response toResponse(Throwable e) {
logger.error("Caught a WAE", e);
...
}
是否可以创建一个 ExceptionMapper 来捕获 WebApplicationExceptions,即使它们的响应已经用实体构建?
我们正在使用 Jersey 1.17。
谢谢。
请考虑查看 GIST 中的代码:
https://gist.github.com/jeorfevre/9fb2c447a01bcc724998
- 注册一个包含 Response 的 MagicException 映射器
- 定义包含响应的异常
- 抛出这个异常
在我们的(遗留)代码库中,我们以不同的方式抛出 WebApplicationExceptions。 为了对我们处理异常的方式进行排序 - 我想为这些 WAE(和其他)创建一个 ExceptionMapper。
然而,我意识到 Jersey 的 ExceptionMapper 只映射未随实体一起抛出的 WAE。
例如:
throw new WebApplicationException(Response.status(500).build());
此异常被 ExceptionMapper 捕获。
throw new WebApplicationException(Response.status(500).entity(WsResourceUtils.createWSResourceRestError(500, "bla")).build());
ExceptionMapper 未捕获此异常。
两者都是从代码中的同一点抛出的。
这是我的 ExceptionMapper:
@Provider
public class GeneralExceptionMapper implements ExceptionMapper<Throwable> {
private static final Logger logger = LoggerFactory.getLogger(GeneralExceptionMapper.class);
@Override
public Response toResponse(Throwable e) {
logger.error("Caught a WAE", e);
...
}
是否可以创建一个 ExceptionMapper 来捕获 WebApplicationExceptions,即使它们的响应已经用实体构建?
我们正在使用 Jersey 1.17。
谢谢。
请考虑查看 GIST 中的代码:
https://gist.github.com/jeorfevre/9fb2c447a01bcc724998
- 注册一个包含 Response 的 MagicException 映射器
- 定义包含响应的异常
- 抛出这个异常