当前位置: 首页 > news >正文

jakarta.websocket.DeploymentException:Endpoint instance creation failed

错误信息:
在这里插入图片描述
在这里插入图片描述

解决方案:

要解决 WebSocket 端点无法实例化(因构造方法问题),同时保留初始化逻辑,需按以下步骤调整:

核心问题分析

WebSocket 容器(如 Tomcat)要求 @ServerEndpoint 类必须有 公共无参构造(用于创建实例),但我的代码上:

  1. 标注了 @Component(让 Spring 管理),但 WebSocket 容器和 Spring 会冲突创建实例;
  2. 依赖 IatCapacity 通过构造方法注入,但 WebSocket 容器无法提供该参数(非 Spring 上下文)。

正确调整方案

1. 动态获取 IatCapacity(替代构造注入)

因 WebSocket 容器不支持构造注入,需运行时从 Spring 上下文获取 IatCapacity

步骤 A:创建 Spring 上下文工具类
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;@Component // 必须由 Spring 托管
public class SpringUtil implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {context = applicationContext;}public static <T> T getBean(Class<T> clazz) {return context.getBean(clazz);}
}
步骤 B:在 ASRWebsocketServer 中动态获取 IatCapacity

在需要使用 IatCapacity 的地方(如 @OnOpen、业务方法),通过 SpringUtil 获取:

@OnOpen
public void onOpen(Session session) {// 动态获取 Spring 管理的 IatCapacity BeanIatCapacity iat = SpringUtil.getBean(IatCapacity.class); this.iat = iat; // 赋值给成员变量// ... 其他初始化逻辑
}
4. 完整代码示例
@Slf4j
@Component
@ServerEndpoint("/iat")
public class ASRWebsocketServer {private Session session;private static IatCapacity iat = null;// 2. 连接建立时动态获取 Bean@OnOpenpublic void onOpen(Session session) {this.session = session;// 从 Spring 上下文获取 IatCapacityiat = SpringUtil.getBean(IatCapacity.class); // ... 其他初始化逻辑}// 其他方法(@OnMessage、@OnClose 等)...
}

逻辑总结

  • 无参构造是必须的:WebSocket 容器强制要求,用于实例化。
  • 放弃构造注入:WebSocket 容器不支持依赖注入,改用 SpringUtil 动态获取 Spring Bean。
http://www.dtcms.com/a/306926.html

相关文章:

  • 2021 年 NOI 最后一题题解
  • pandas 分组相同赋值1然后累加
  • PAT 甲级题目讲解:1011《World Cup Betting》
  • 【MySQL 数据库】MySQL索引特性(一)磁盘存储定位扇区InnoDB页
  • Linux c网络专栏第四章io_uring
  • 面向对象中级编程
  • DFT不同维度中gate、cell、instance介绍
  • RAG:检索增强生成的范式演进、技术突破与前沿挑战
  • pytorch入门2:利用pytorch进行概率预测
  • [NOIP2002 提高组] 均分纸牌
  • 破解海外仓客户响应难题:自动化系统是关键
  • 如何选择GEO优化公司哪家好?
  • MySQL学习---分库和分表
  • NSGA-III(非支配排序遗传算法 III)求解 7 目标的 DTLZ2 测试函数
  • DFT设计中的不同阶段介绍
  • 天地图Api4.0.怎么根据geojson的数据。把一个省的所有市区标记色块和文字
  • 【ssh】ubuntu服务器+本地windows主机,使用密钥对进行ssh链接
  • 怎么在 WSL CentOS8 与宿主机windows11 之间传递文件
  • 网络编程(C语言)
  • 从训练到推理:Intel Extension for PyTorch混合精度优化完整指南
  • 常见CMS获取webshell的方法-靶场练习
  • 集成电路学习:什么是ARM CortexM处理器核心
  • sqli-labs:Less-5关卡详细解析
  • STP技术
  • 应用驱动 协同创新:中国人工智能开启高质量发展新篇章
  • 深度学习与图像处理案例 │ 图像分类(智能垃圾分拣器)
  • 360环视技术推荐的硬件平台:支持多摄像头与三屏异显的理想选择
  • LeetCode 刷题【22. 括号生成】
  • 敏捷与SCRUM三大支柱:数字化时代的韧性引擎
  • 【解决方案】frida-ps -Ua报错unable to perform ptrace pokedata: I/O error