exception - 使用 Jersey ExceptionMapper 将异常映射到响应时回滚事务
问题描述
我正在使用自定义 Jersey ExceptionMapper 将未经检查的异常映射到错误响应中(如文档中所述)。我的问题是事务没有回滚,在异常之前进行的每个数据库修改都被持久化。
如果我不使用 ExceptionMapper,而是抛出 WebApplicationException,也会发生同样的事情。
如何向客户端发送错误响应以保持正常行为(回滚事务)?我在这里发现了一个类似的问题,但我不使用弹簧。
解决方案
您可以做的是RequestEventListener
在请求的整个生命周期中使用 a 来管理事务。您可以侦听RequestEvent.Type
s,其中包括 、 、 等事件RESOURCE_METHOD_START
。ON_EXCEPTION
您RESOURCE_METHOD_FINISH
可以在请求处理开始时开始事务,并根据处理成功或抛出异常来提交或回滚事务。
这几乎就是Dropwizard使用它的@UnitOfWork
. 你可以看到它是如何在这个包中实现的。看看UnitOfWorkApplicationEventListener
。你会看到他们如何实现我上面所说的。
推荐阅读
- vb.net - 如何在 Vb.Net 中使用 ShowDialog 启用父窗体
- c# - 从列表C#中的名称获取元素组
- python - 在 Python 中创建一堆单独列表的主列表
- php - 如何在没有真实 URL 的情况下在 PHP 中返回文件?
- floating-point - 十进制到二进制 - 为什么不能将小数点的左右两边都转换为二进制,就好像两边都是整数一样?
- python - 隐藏绘图轴但显示标签
- python - Tkinter 画布:在不实际移动光标的情况下移动鼠标(想想 Photoshop 调整画笔大小)
- java - LocalDateTime 未在程序内更新
- sql - SQL::Maker 如何向字段添加函数
- python - 使用python从excel中读取数据