问题简单描述:使用fastjhson将对象转为json字符串出现key首字母小写的问题

情景再现:

//想要转为json的对象  
    = sqlSession.selectOne(mapperType, obj);
//中间其他步骤省略...
//对象转json字符串
String jsonStr = JSON.toJSONString( );

转完后的输入结果如下:

{
	\"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的注意要在一个地方进行改动, 避免线程安全问题

参考文章

 

收藏 打印