用杰克逊的@JsonProperty注解属性名,会多出一个字段

  

遇见了这个情况,我的字段定义是xVal, yVal,用的lombok的@ data注解。
然后查询到了下面这偏文章,https://bbs.csdn.net/topics/392305619,里面的回答是图片,我只是翻译一下图片而已。

  

以下是引用的原文:
jackson2对pojo类型序列化的处理。

  

Jackson2在初始化序列器时,对pojo类型对象会收集其属性信息,属性包括成员变量及方法,然后属性名称和处理过后的方法名称做为关键保存到一个LinkedHashMap中。收集过程中会调用com.fasterxml.jackson.databind.util。BeanUtil中的legacyManglePropertyName方法用来处理方法名称,它会将获?设置方法前缀,即获取或设置去掉,<强>并将其后面的连续大写字符转换成小写字符强返回。例如:getNEWString会转变成份返回。你的属性名称如果有这样的“nSmallSellCount", lombok自动生成的得到方法就会是这样的“getNSmallSellCount",处理过后就是这样的“nSmallSellCount",这与属性nSmallSellCount并不冲突,可以同时存在于HashMap中。收集完属性信息后,下面的步骤中会删除掉非可见的属性,一般指的是私有成员变量,这时,名称为“nSmallSellCount"的成员变量属性会被删除掉,这样的序列化结果是不会有问题的,但,如果加了@JsonProperty注释,Jackson2会认为这个属性是可见的,不必会删除,这时这两个表示同一个值得属性就会被一同序列化。

  <人力资源/>   

翻译完毕,好累....

  

总结一下知识点:
1。杰克逊默认序列化时只去预备方法的字段,私有字段是不参与序列化的
2。@JsonProperty注解在私有属性上,标明该私有字段在序列化时可见,另外可以指定序列化的名称。
3。@JsonProperty如果标注在预备方法上就不会有问题4。项目中使用了lombok的@ data注解,所以只能标注在属性上,这就导致了出问题。
br/> 4。项目中使用了lombok的@ data注解,所以只能标注在属性上,这就导致了出问题。

用杰克逊的@JsonProperty注解属性名,会多出一个字段