当前栏目
用jackson的@JsonProperty注解属性名,会多出一个字段
遇见了这个情况,我的字段定义是xVal,yVal,用的lombok的@Data注解。
然后查询到了下面这偏文章,https://bbs.csdn.net/topics/392305619,里面的回答是图片,我只是翻译一下图片而已。
以下是引用的原文:
jackson2对pojo类型序列化的处理。
Jackson2在初始化序列器时,对pojo类型对象会收集其属性信息,属性包括成员变量及方法,然后属性名称和处理过后的方法名称做为key保存到一个LinkedHashMap中。收集过程中会调用com.fasterxml.jackson.databind.util.BeanUtil中的legacyManglePropertyName方法用来处理方法名称,它会将get/set方法前缀,即get或set去掉,并将其后面的连续大写字符转换成小写字符返回。例如: getNEWString会转变成newstring返回。你的属性名称如果有这样的"nSmallSellCount",lombok自动生成的get方法就会是这样的"getNSmallSellCount",处理过后就是这样的"nsmallSellCount",这与属性nSmallSellCount并不冲突,可以同时存在于HashMap中。收集完属性信息后,下面的步骤中会删除掉非可见的属性,一般指的是私有成员变量,这时,名称为"nSmallSellCount"的成员变量属性会被删除掉,这样的序列化结果是不会有问题的,但,如果加了@JsonProperty注释,Jackson2会认为这个属性是可见的,不必会删除,这时这两个表示同一个值得属性就会被一同序列化。
翻译完毕,好累。。。。
总结一下知识点:
1.jackson默认序列化时只去get set方法的字段,私有字段是不参与序列化的
2.@JsonProperty 注解在私有属性上,标明该私有字段在序列化时可见,另外可以指定序列化的名称。
3.@JsonProperty 如果标注在get set方法上就不会有问题br/>4.项目中使用了lombok的@Data注解,所以只能标注在属性上,这就导致了出问题。
<="" a="">5.解决办法,手动编写get set方法,注解加到方法上。="">
相关文章
- babel如何解析jsx
- js刷leetcode动态规划(图文视频讲解)
- JavaScript刷LeetCode心得总结
- js分类刷leetcode.动态规划
- 通过JS调用设备原生分享功能
- 用原生JS实现网页调用系统自带的分享功能
- Jmeter系类(32) - JSR223(2) | Groovy常见内置函数及调用
- Jmeter系类(31) - JSR223(1) | 控件介绍
- Jmeter系列(17)- 常用断言之JSON断言
- prometheus、node_exporter设置开机自启动
- Centos8.X 搭建Prometheus+node_exporter+Grafana实时监控平台
- 【Rabbitmq报错及解决办法】Error: unable to connect to node rabbit@rabbitmq3: nodedown
- 如何快速上手 angular.js
- Jmeter系列(8)- 参数化:JSON提取器、全局参数化、CSV文件导入
- JavaScript快速入门
- 初识jQuery
- 关于JavaScript0.1+0.2=?浮点数精度问题
- NanoDet:这是个小于4M超轻量目标检测模型
- JavaScript回调函数的高手指南
- 前端开发:4、JavaScript简介、变量与常量、数据类型及内置方法、运算符、流程控制、循环结构、内置方法