Jackson 序列化大写的属性返回结果变成小写
序列化:将对象属性转化为格式化的字符串
反序列化:将字符串转化为 bean 对象
之前遇到过 Jackson 反序列化解析数据报错 UnrecognizedPropertyException: Unrecognized field "ACC",那是属于反序列化的时候,大写的属性名解析出现问题。因为 lombok 默认生成的 getter、setter 会根据驼峰命名规则解析出属性名,首字母大写会默认被解析成小写,从而导致问题。
这次也是大写属性名的问题,不过是在序列化的时候。厂家的报文字母变量全部大写,在定义解析的时候获取到值,但在输出 JSON 化的 bean 时,属性名首字母变成了小写。
期望输出的结果:
{
"ADDRESS": "www.xxxxxx.com",
"CMD": 0,
"DEVICE": "1234567890",
"HEART": 60,
"MQTTPASS": "",
"MQTTUSER": "",
"PORT": "8100",
"REVISE": 0,
"SEQ": "2019102710001",
"SERVERTYPE": "TCP"
}
实际得到的是
{
"aDDRESS": "www.xxxxxx.com",
"cMD": 0,
"dEVICE": "1234567890",
"hEART": 60,
"mQTTPASS": "",
"mQTTUSER": "",
"pORT": "8100",
"rEVISE": 0,
"sEQ": "2019102710001",
"sERVERTYPE": "TCP"
}
百度到解决方法:fastjson序列化的坑,主要有两个,一个是添加 @JSONField(name = "ADDRESS")
注解,测试有效,但需要针对所有大写的属性都添加。
另一个方法是序列化前配置 fastjson 属性 TypeUtils.compatibleWithJavaBean
:
TypeUtils.compatibleWithFieldName = true;
RequestVO requestVO = JSONObject.parseObject(contentBody, RequestVO.class)