使用Jersey ExceptionMapper将异常映射到响应时的回滚事务

时间:2019-03-06 16:23:09

标签: exception transactions jersey

我正在使用自定义的Jersey ExceptionMapper将未经检查的异常映射到错误响应中(如documentation中所述)。我的问题是,该事务不会回滚,在持久化异常之前进行的每个数据库修改都会保留。

如果我不是使用ExceptionMapper而是抛出WebApplicationException,则会发生相同的事情。

如何将错误响应发送给客户端,以保留正常行为(回滚事务)? 我发现了类似的问题here,但我没有使用spring。

1 个答案:

答案 0 :(得分:1)

您可以做的是使用RequestEventListener在请求的整个生命周期内管理事务。您可以收听RequestEvent.Types,其中包括诸如Edit1 = �12,345.95 RESOURCE_METHOD_STARTON_EXCEPTION等事件。您可以在请求处理开始时开始事务,然后提交或提交。根据是否成功处理或引发异常来回滚事务。

Dropwizard就是RESOURCE_METHOD_FINISH。您可以在this package中看到所有实现方式。查看UnitOfWorkApplicationEventListener。您将看到他们如何实现我上面所说的内容。