我正在使用自定义的Jersey ExceptionMapper将未经检查的异常映射到错误响应中(如documentation中所述)。我的问题是,该事务不会回滚,在持久化异常之前进行的每个数据库修改都会保留。
如果我不是使用ExceptionMapper而是抛出WebApplicationException,则会发生相同的事情。
如何将错误响应发送给客户端,以保留正常行为(回滚事务)? 我发现了类似的问题here,但我没有使用spring。
答案 0 :(得分:1)
您可以做的是使用RequestEventListener
在请求的整个生命周期内管理事务。您可以收听RequestEvent.Type
s,其中包括诸如Edit1 = �12,345.95
,RESOURCE_METHOD_START
,ON_EXCEPTION
等事件。您可以在请求处理开始时开始事务,然后提交或提交。根据是否成功处理或引发异常来回滚事务。
Dropwizard就是RESOURCE_METHOD_FINISH
。您可以在this package中看到所有实现方式。查看UnitOfWorkApplicationEventListener
。您将看到他们如何实现我上面所说的内容。