1.业务背景
使用websocket 接收消息都是String类型,没办法自定义实体类接收,所以接发都必须将json 转 对象 对象转 json。
这是我最开始的实体类,也就是转换的类型
package com.trinity.system.domain;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;import javax.validation.constraints.NotBlank;
import java.io.Serializable;/*** <p>全文检索参数<p>** @author Tony* @date 2021-04-03*/
@Data
public class FullSearchParam implements Serializable {/*** 数据源类别*/private Integer datasourceCategory;/*** 数据源类型*/private String datasourceType;/*** 文件大小 10-20*/private String fileSize;/*** 文件单位*/private String fileUnit;/*** 时间范围 2000-03-01 10:11 - 2000-04-01 20:11 创建的文件*/private String timeScore;/*** 检索内容*/@NotBlank(message = "检索内容不能为空")private String searchContext;/*** 开始查询 / 停止查询*/@NonNullprivate Integer status;}
websocket 前端还没完成开发,我使用postman 测试
刚开始我是按照平常发送请求的格式 ,但是socket 发送的是文本,也就是他会给加 /n,所以刚开始转换的时候是非法字符
{"searchContext":"index"}
然后采用上上面的方式去发,不报错了。开心
结果运行到下面抛出异常。之前也是用过所以没出啥事,发现这个searchContext 字段的属性为null,因为的debug 走的能看见发的消息的没有丢失,但是还有 / 这种符号,我就开始漫长的调试之路,但都是没有结果,也不知道啥问题吧。
我就想到他这种转换肯定得解析在通过反射机制创建对象挨个塞进去。但是我有data 注解是可以有 get set 方法, 我就猜想 是不是 构造器的问题 就加了 @AllArgsConstructor 注解,就解决了上面的问题
@Data
@AllArgsConstructor
public class FullSearchParam implements Serializable {