WebApplicationType.REACTIVE 的webSocket

简介: 该代码包含WebSocket通信所需的通用请求体、响应类及配置类。`WebSocketRequest`封装客户端请求,含操作类型与数据;`WebSocketResponse`定义服务端响应结构,并提供成功/失败方法;`ConnectDTO`用于连接类型标识;`WebFluxWebSocketConfig`完成WebSocket处理器映射与适配器配置,支持响应式编程模型。

通用请求体类

@ApiModel("websocket请求消息")
public class WebSocketRequest<T> implements Serializable {
  private static final long serialVersionUID = 1L;

  /**
   * 参考:com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiBroadcastEventEnum;
   */
  private @NotNull(message = "业务操作类型不能为空") Integer aiBroadcastEventEnum;

  private T data;

  public T getRealData(Class<T> clazz) {
    if (this.data == null) {
      return null;
    } else {
      String jsonStr = JsonUtil.toJsonStr(this.data);
      return (T) JsonUtil.parseObject(jsonStr, clazz);
    }
  }

}

通用响应类

@Data
public class WebSocketResponse<T> implements Serializable {
  private static final long serialVersionUID = 1L;
  /**
   * 参考枚举:com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiBroadcastEventEnum
   */
  private Integer aiBroadcastEventEnum;
  private String code;
  private String msg;
  private T data;

  public static <T> Mono<WebSocketResponse<T>> ok(Integer eventEnum, T data) {
    WebSocketResponse<T> response = new WebSocketResponse<T>();
    response.setAiBroadcastEventEnum(eventEnum);
    response.setCode(RespStatusEnum.OK.getCode());
    response.setMsg(RespStatusEnum.OK.getMsg());
    response.setData(data);
    return Mono.just(response);
  }

  public static Mono<WebSocketResponse<Void>> ok(Integer eventEnum) {
    WebSocketResponse<Void> response = new WebSocketResponse<Void>();
    response.setAiBroadcastEventEnum(eventEnum);
    response.setCode(RespStatusEnum.OK.getCode());
    response.setMsg(RespStatusEnum.OK.getMsg());
    return Mono.just(response);
  }

  public static <T> Mono<WebSocketResponse<T>> fail(Integer eventEnum, RespStatusEnum status, String err) {
    WebSocketResponse<T> response = new WebSocketResponse<T>();
    response.setAiBroadcastEventEnum(eventEnum);
    response.setCode(status.getCode());
    response.setMsg(err);
    return Mono.just(response);
  }

}

连接类型类

@Accessors(chain = true)
public class ConnectDTO {

  /**
   * 连接类型 参考枚举:com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiBroadcastEventEnum
   */
  private Integer type;

}

配置类

public class WebFluxWebSocketConfig {

 /** 让 Spring 注入已经带依赖的 Handler */
 @Bean
 public HandlerMapping webSocketMapping(WebSocketReceivedHandler handler) {
   return new SimpleUrlHandlerMapping(
           Map.of("/api/xxx/ws", handler),   // 用注入的 handler
           -1
   );
 }

 @Bean
 public WebSocketHandlerAdapter handlerAdapter() {
   return new WebSocketHandlerAdapter();
 }
}
目录
相关文章
|
开发工具 Docker 容器
Docker设置国内镜像源
Docker设置国内镜像源
20511 1
|
Java 应用服务中间件 数据库连接
面试官:SpringBoot如何优雅停机?
面试官:SpringBoot如何优雅停机?
1162 0
|
7月前
|
安全 Java API
Spring Boot 4 升级实战:从3.x到4.0的分步升级保姆级指南
Spring Boot 4.0于2025年11月发布,基于Spring Framework 7.0,实现模块化(47个轻量自动配置)、JSpecify空安全校验、原生API版本控制等重大升级。镜像减19%、启动快33%,迁移平滑,3.5.x支持至2026年11月。(239字)
6229 1
|
XML 人工智能 Java
注入Java Bean的方式
本文总结了 Spring Boot 中常见的 Bean 注入方式,包括字段注入(`@Autowired`)、构造器注入(推荐)、Setter 方法注入、`@Resource` 按名称注入、`@Bean` 定义复杂 Bean、`@Value` 注入配置值、XML 配置、`ApplicationContextAware` 手动获取 Bean 以及 JSR-330 的 `@Inject`。同时分析了 Setter 注入逐渐被淡化的原因,强调构造器注入的不可变性和安全性优势,并推荐结合 Lombok 简化代码。文章还提供了按需选择注解的建议和最佳实践,帮助开发者根据场景选择合适的依赖注入方式。
1296 49
|
缓存 Linux
【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
4604 1
【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
|
JavaScript
Vue3代码展示(vue-codemirror)
`vue-codemirror`插件为Vue应用提供了一个强大的代码编辑器组件,支持代码高亮、自定义样式、暗黑模式等特性。通过简单的配置即可实现丰富的代码编辑体验。安装依赖后,创建`CodeMirror.vue`组件并在目标页面中使用即可。
3104 1
Vue3代码展示(vue-codemirror)
|
开发工具 git
idea结合git回到某个提交点
本文介绍了如何在IntelliJ IDEA中使用Git工具回退到之前的提交点,通过Git管理界面查看提交日志,选择特定提交并进行软重置、混合重置或硬重置以撤销后续的更改。
3030 1
idea结合git回到某个提交点
|
Java 关系型数据库 开发工具
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
本文提供了解决方案,如何在IDEA中创建Spring 2.X版本的项目并使用JDK8,尽管Spring 2.X已停止维护且IDEA不再直接支持,通过修改pom.xml或使用阿里云的国内源来创建项目。
3113 0
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
|
负载均衡 监控 网络协议
在 Java 中使用 WebSocket
在 Java 中使用 WebSocket
1638 1