WebSocket-发送对象-自定义Encoder
2020-06-28 05:08
573 查看
因最近要交前端结课作业,需要连数据库并一起打包太麻烦!
用Vue写前后端分离又稍显复杂,所以准备在我自己的服务器上放一个 WebSocket
再通过 前端 来建立连接获取 数据 就行了
概述:
-
Websocket发送对象,通过Encoder 自定义规则(转换为JSON字符串),前端收到后再转换为JSON对象
-
如果不实现并指定Encoder,直接通过 session.getBasicRemote().sendObject(Object object); 发送对象报异常
javax.websocket.EncodeException: No encoder specified for object of class xxxx
场景:
-
可以单独写一个WebSocket来提供服务,统一返回JSON格式;
websocket不存在跨域问题,通过请求参数来权限验证\控制;
依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.68</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.10.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.3</version> </dependency>
自定义Encoder
package com.live.config; import com.alibaba.fastjson.JSON; import com.live.model.User; import javax.websocket.Encoder; import javax.websocket.EndpointConfig; public class WebSocketCustomEncoding implements Encoder.Text<User> { @Override public String encode(User user) { assert user!=null; return JSON.toJSONString(user); } @Override public void init(EndpointConfig endpointConfig) { } @Override public void destroy() { } }
Websocket发送自定义对象
如果不在 @ServerEndpoint 指定endocers,直接通过sendObject(Object o)发送对象,
会报javax.websocket.EncodeException: No encoder specified for object of class xxxx异常
@Service //encoders指定自定义的Encoder类文件 @ServerEndpoint(value = "/websocketService",encoders = WebSocketCustomEncoding.class) public class WebSocketService { @OnOpen public void open(Session session) throws IOException, EncodeException { System.out.println("连接打开了"); User user = new User(); user.setId(1); user.setPassword("081420"); user.setName("DeadAndLive"); //发送自定义对象 session.getBasicRemote().sendObject(user); } }
前端
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> </body> <script src="js/jquery-3.4.1.min.js"></script> <script> let websocket = new WebSocket("ws://localhost:8080/websocketService"); $(document).ready(function() { // 指定websocket路径 websocket.onopen = function(event) { console.log("连接打开"); // websocket.send("this is client send message!") websocket.onmessage = function(e) { //收到的字符串消息 console.log(e.data); //将字符串转为JSON对象 var json = JSON.parse(e.data); console.log(json); } }; }); window.onbeforeunload = function(){ if (websocket!=null) { websocket.close(); } } </script> </html>
打印结果
相关文章推荐
- rabbitmq与spring集成发送自定义对象
- 向广播发送自定义类型的对象
- mina仿qq聊天功能,自定义协议,协议的编码和解码详解,发送xml对象json,mina开发大全,详细api,mina心跳
- Netty4 自定义Decoder,Encoder进行对象传递
- Netty4 自定义Decoder,Encoder进行对象传递
- Ajax中自定义发送请求和处理响应对象
- 自定义Encoder/Decoder进行对象传递
- post发送JSON数据(字符串、数组、字典、自定义对象)给服务器
- 通过父类对象指针发送子类自定义消息
- WebSocket使用javax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0)向页面方法发送对象
- Netty4 自定义Decoder,Encoder进行对象传递(粘包处理)
- 3.WebSocket编程—发送与接收JAVA对象
- 往服务器发送自定义的对象
- kafka发送自定义消息体(对象、数组)
- 学习WebSocket(三) — 发送和接收Java对象
- 浅析JavaScript获得Object对象(自定义对象)的类型名方法
- 在Android中,不通过缺省的内置应用发邮件,自定义邮件发送(检验中)
- 自定义消息的发送和接收的方法
- 创建javaScript自定义对象,并给属性赋值
- magento email:快速实现发送自定义邮件