原创

Spring Response Json数据属性名大写变小写原因追溯

img

从断点切入,跟踪发现类的field字段存储在BeanPropertyWriter中,在BeanPropertyWriter各处设断点,拦截到BeanSerializerFactory

BeanSerializerFactory

img

进一步跟踪,发现在POJOPropertiesCollector中属性名称发生改变

POJOPropertiesCollector

img

最终定位到BeanUtil中,发现和驼峰命名规则有关

BeanUtil

img

如下,红框部分是罪魁祸首

BeanUtil

img

以下为断点位置图

img

心得:

字段名称第二个字母不能为大写,否则会被jackson改写为小写

调用原理

此外,此次跟踪发现,spring采用的是jackson进行参数序列化和反序列化

其中,序列化处理器存在缓存里

SerializerCache

img

首次查找某个类的序列化处理器时,新建处理器和类属性信息,并存储到缓存中,第二次直接查找和调用。

定位思路

如果跟踪代码没有思路时,可以在最基础的bean中设置断点拦截

如果断点频繁时,可以设置断点条件

如果对整个结构不了解,可以去看jar包整体文件目录,大致有个轮廓,如下便是在jackson 的jar包中发现的驼峰规则。

img

正文到此结束