目前正在开发的系统,V2.0版对V1.0版进行了大面积重构。V1.0版Bean采用下滑线命名法,
V2.0版Bean采用驼峰命名法,关键的系统间通讯功能要沿用V1.0版设计实现,JSON格式协议也
采用V1.0版下滑线命名法,从而产生了一个奇葩需求:
Bean转化为JSON对象时,Bean的所有属性名由“驼峰式”转化为“下滑线式”,所有属性值转为字符串类型。
解决方法
- 自己写一个类,利用“反射”,将Bean的属性名和属性值进行转化,最后组成JSON字符串。
方案实现起来稍麻烦,且对List、Map等集合属性处理复杂。可以尝试,但不推荐。- json-lib不行,只能针对某个特定对象的某种类型的属性做转化。
- gson没研究,网上说可行。有时间研究下。
- FastJSON可行,项目也有用FastJSON,所有采用FastJSON实现。
实现代码
1 | private static NameFilter nf = new NameFilter() { |
实现关键点
- FastJSON1.1.42及以上版本,JSON.toJSONString方法才支持SerializeFilter数组做参数。
- 采用反射方法获取Bean中Enum类型属性值。