問題簡單描述:使用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的注意要在一個地方進行改動, 避免線程安全問題