在一次操作中,发现操作中发送的message为空
于是就去查看了CoontrolReq中的自定义的toJsonString()
方法
@AllArgsConstructor
public class ControlReq {
/**
* 流水号
*/
private String serial;
/**
* 控制类型
*/
private String action;
/**
* 控制位
*/
private String num;
/**
* 取值
*/
private String value;
/**
* 时间戳
*/
private String time;
/**
* 转换为json字符串
*
* @return
*/
public String toJsonString() {
return JSON.toJSONString(this);
}
}
发现使用方式并无问题,于是就觉得很奇怪,就将JSON.toJSONString(this)
换成了new GSON().toJSON(this)
,发现此时message就有数据了,于是就觉得很奇怪,这两个不是都一样么,为什么一个可以一个不可以,于是尝试在类上加了一个@Data
注解
行了!
下面是我的一些个人看法:
fastjson
在序列化的时候,先利用反射找到对象类的所有get方法,接下来去get,然后小写化,作为json的每个key值,而get方法的返回值作为value。接下来再反射field,添加到json中。
gson
感觉应该就和getter/setter方法无关。
如果有知道真正的原因的,请告诉我!