用实体抛出的WebApplicationExceptions的ExceptionMapper?

Sha*_*kka 10 java jax-rs jersey

在我们的(遗留)代码库中,我们以不同的方式抛出WebApplicationExceptions.为了对我们如何处理异常做出一些命令 - 我想为这些WAE(和其他)创建一个ExceptionMapper.

然而,我意识到Jersey的ExceptionMapper只映射了未被实体抛出的WAE.

例如:

throw new WebApplicationException(Response.status(500).build());
Run Code Online (Sandbox Code Playgroud)

ExceptionMapper捕获此异常.

throw new WebApplicationException(Response.status(500).entity(WsResourceUtils.createWSResourceRestError(500, "bla")).build());
Run Code Online (Sandbox Code Playgroud)

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);
...
}
Run Code Online (Sandbox Code Playgroud)

是否有可能创建一个ExceptionMapper,即使它们的响应已经使用实体构建,它也会捕获WebApplicationExceptions?

我们正在使用Jersey 1.17.

谢谢.

jeo*_*vre -1

请考虑查看 GIST 中的代码:

https://gist.github.com/jeorfevre/9fb2c447a01bcc724998

  1. 注册一个包含 Response 的 MagicException 映射器
  2. 定义包含响应的异常
  3. 抛出这个异常