问题简单描述:使用fastjhson将对象转为json字符串出现key首字母小写的问题
情景再现:
//想要转为json的对象object
Object object = sqlSession.selectOne(mapperType, obj);
//中间其他步骤省略...
//对象转json字符串
String jsonStr = JSON.toJSONString(object);
转完后的输入结果如下:
{
"nAME": "dailix",
"pASSWORD": "dbbfc6985712113e43c10a1d069260d19a1c117f",
"page": {
"currentPage": 0,
"currentResult": 0,
"entityOrField": false,
"pageStr": "",
"pd": {},
"showCount": 15,
"totalPage": 0,
"totalResult": 0
},
"rOLE_IDS": "",
"role": {
"rIGHTS": "686472012592423468028657882539078621399219175426",
"rOLE_ID": "3",
"rOLE_NAME": "一级代理"
},
"sKIN": "default",
"uSERNAME": "dailix",
"uSER_ID": "30000"
}
从上述输出结果可以的发现,JSON字符串key的首字母出现小写问题,我们期望是大写但是fastJson将key首字母自动变成小写,导致其他处理报错。
解决方案:
1. 如果你的项目由多个模块且为分布式部署, 则可考虑使用设置System.property
2. 一般只是极少数的代码出现此情况, 那么建议直接在你的单例Service初始化时, 在静态块中直接改变TypeUtils的变量值, 如果用Spring的话可以使用InitializingBean进行处理
TypeUtils.compatibleWithJavaBean = true;
3. 此变量是public的注意要在一个地方进行改动, 避免线程安全问题
参考文章