海滨擎蟹

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)

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »