IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【详细】WebSocket传递对象(sendObject方法)报错解决方案 -> 正文阅读

[网络协议]【详细】WebSocket传递对象(sendObject方法)报错解决方案

当我们在服务端使用WebSocket的sendObject方法直接向前端传递一个对象时,会有如下报错

javax.websocket.EncodeException: No encoder specified for object of class [这里是你sendObject里传的对象的全名]

原因是你没有在@ServerEndpoint里指定Websocket的编码器。解决方法如下:

编写一个编码器类,下面是一个比较通用的编码器,你可以直接复制粘贴然后进行简单的修改就好,注解也很详细。



import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.json.JsonMapper;

import javax.websocket.EncodeException;
import javax.websocket.Encoder;
import javax.websocket.EndpointConfig;

/*
* Text<ResponseMessage>里的ResponseMessage是我自己写的一个消息类
* 如果你写了一个名叫Student的类,需要通过sendObject()方法发送,那么这里就是Text<Student>
*/
public class ServerEncoder implements Encoder.Text<ResponseMessage> {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        // 这里不重要
    }

    @Override
    public void init(EndpointConfig arg0) {
        // TODO Auto-generated method stub
        // 这里也不重要

    }

    /*
    *  encode()方法里的参数和Text<T>里的T一致,如果你是Student,这里就是encode(Student student)
    */
    @Override
    public String encode(ResponseMessage responseMessage) throws EncodeException {
        try {
            /*
            * 这里是重点,只需要返回Object序列化后的json字符串就行
            * 你也可以使用gosn,fastJson来序列化。
            */
            JsonMapper jsonMapper = new JsonMapper();
            return jsonMapper.writeValueAsString(responseMessage);

        } catch ( JsonProcessingException e) {
            e.printStackTrace();
            return null;
        }
    }
}

然后在@ServerEndpoint注解的类中指定encoders

/*
*这里的ServerEncoder就是上面的编码器类
*/
@ServerEndpoint(value = "/chat/{room}",encoders = { ServerEncoder.class })
@Component
public class WebSocketService {

    // 你的代码
}

? 如果你要传递多种类型的对象,也可以编写多个编码器,然后在endocer里添加多个。

如果你有兴趣,可以来我的博客逛逛

https://timegoesby.top/

本文章参考自下面这篇文章

https://blog.csdn.net/u014175572/article/details/46490395

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:42:25  更:2021-08-05 17:43:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:52:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码