【发布时间】:2016-10-27 07:02:05
【问题描述】:
我正在尝试在我的 Spring Boot 应用程序中为每个请求实现一个事务。 我有一个带有 HIGHEST_PRECEDENCE 顺序的过滤器,它打开一个事务,让其他过滤器和应用程序的服务完成它们的工作并提交事务。但是,如果提交失败,则 servlet 响应已经编写并提交(带有成功代码),我无法修改它的状态和消息正文以提供有关错误的信息。
我需要在我的过滤器中修改 servlet 响应,但有些东西提交了它。
我已禁用杰克逊提交,但在最后一个过滤器 (WsFilter) 之后,无论如何都会提交消息。缓冲区大小尽可能大。我猜在 WsFilter 之后默认情况下嵌入的 tomcat 提交?
我还尝试使用包装器并禁止刷新,直到在我的事务过滤器中将布尔标志设置为 true,但出现空指针异常 - coyoteResponse 为空。
如何保持未提交的响应?
【问题讨论】:
-
您需要确保在所有提交成功之前没有向 ServletResponse 写入任何内容
-
分享包装代码
标签: java spring tomcat transactions spring-boot