我的背景
今天在做聊天消息中的图片消息的时候,需要在发送图片消息后,进行一些扩展消息的补充,所以在Message 表中添加了 josn
类型的 extra
字段:
create table tb_chat_message
(
id bigint not null comment '聊天消息表id'
primary key,
sequence bigint null comment '消息序列号',
message_feature int default 0 null comment '消息属性:0.默认,1.离线消息,2.漫游消息,3.同步消息,4.透传消息,5.控制消息',
message_type int default 1 null comment '消息类型:1.文本,2.图片,3.语音,4.图文混合,5.文件,6.语音通话,7.视频通话,
8.白板演示,9.远程控制,10.日程安排,11.外部分享,12.@消息,13.红包消息',
content text null comment '消息内容,最大文本数量1024个字符',
url varchar(1023) null comment '图片,文件,视频,音频等等链接',
extra json null comment '扩展字段,一般使用JSON字符串存储,可以用户回复消息,@消息,超文本消息,卡片消息,视频消息等',
deleted tinyint(1) default 0 null comment '是否删除该条聊天记录,0.false, 1.ture',
create_time datetime null comment '创建时间',
update_time datetime null comment '更新时间'
)
charset = utf8mb4;
可以看到其中的extra
字段是json
类型的,但是呢,这个补充扩展数据,是动态的,没有具体固定的Java 对象用来承接,它对应的实体对象会随着 消息类型 messagetType 的变化而进行对应的实体变化,所以不能像网上那样直接使用一个固定的实体来进行接收。
最开始自己是使用Map<String, Object>
来进行的接收,但是后续发现还需要把扩展对象转换为Map, 较为麻烦,而且不够高效,后来又把 extra 属性数据类型设置成为了Object
:
/**
* 扩展字段,一般使用JSON字符串存储,可以用户回复消息,@消息,超文本消息,卡片消息,视频消息等
*/
protected Object extra;
但是对于后续是否能够成功的写入和读取还是抱有怀疑,不知道这种动态类型的JSON 字段应该怎么样来设计,进行读写操作较为合理,还请各位网络大神给予指导。