一、该问题的重现步骤是什么?
1. 我在处理sse心跳感应时,每10s发送一次来确保连接存活,在这期间对于前端流关闭时,我通过catch IOException 来捕获该异常,局部是能够捕获到,捕获到之后还是会进入到全局异常中
2.
3.
二、你期待的结果是什么?实际看到的又是什么?
我希望局部捕获之后,全局不再抛出
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
SseEmitter.send() 抛出的异常不是立即终止,而是异步触发回调,SseEmitter 背后是基于 Servlet 异步响应实现的。
如果连接关闭或网络中断,send() 内部会触发 IOException,但这异常通常被封装并延迟抛出(在另一个线程中)。
可以在OnErr的时候处理下,你按照下面的方式看看
@GetMapping("/sse") public SseEmitter stream() { SseEmitter emitter = new SseEmitter(0L); emitter.onCompletion(() -> log.info("SSE 连接已完成")); emitter.onTimeout(() -> { log.warn("SSE 超时"); emitter.complete(); }); emitter.onError((Throwable t) -> { log.error("SSE 出错", t); // 可选:emitter.completeWithError(t); 或 emitter.complete(); }); try { emitter.send(SseEmitter.event().data("hello")); } catch (IOException e) { log.error("发送 SSE 数据失败", e); // 这里你可以调用 completeWithError,触发 onError 回调 emitter.completeWithError(e); } return emitter; }
另外请给我们邮箱:bladejava@qq.com 发一个邮件提供授权公司名,登记为商业账号后方可进行商业版问题答疑。
作者追问:2025-05-13 13:22
加上上述代码之后,依旧会出现这样的情况,无法将异常给屏蔽


讨论(1)
-
最后加上了局部异常处理器来覆盖全局处理器暂时解决
讨论(0)
官方新品
- 热议问题
-
物联网平台支持本地存储吗,不用minio
1
-
bladx admin、gateway等项目起不来
1
-
解决sql注入问题导致gateway无法启动,报错java.io.FileNotFoundException:WebMvcConfigurer.class
1
-
一个用户绑定多角色,在登陆后获取其并集
1
-
mvn clean compile 编译 BladeX-Tool 提示 ... /ojdbc7-12.2.0.1.pom 401 Unauthorized
2
-
gateway无法启动,报错java.io.FileNotFoundException:WebMvcConfigurer.class
1
-
cookie中token缺失HttpOnly和Secure属性
1
-
在nacos配置多数据库之后sql日志不能正常打印了
1
-
无法本地调试服务
1
-
启动流程设计器工程flowable-design,表act_id_property用的是版本6.5.0.1,需要引入哪些依赖
1
扫一扫访问 Blade技术社区 移动端