jackson转换json大写_jackson 转 json时,字段名大小写问题
现象:


分析:
从图中,我们可以看到 A1这个字段在Json中出现了2次。
这种问题出现在一种情况下,当字段的首字母是大写,而且加上的@JsonProperty的值得首字母也是大写的时候。
什么原因呢?
jackson默认的字段属性发现规则如下:
所有被public修饰的字段->所有被public修饰的getter->所有被public修饰的setter。
字段都是private的,所以无法识别。
而 getter识别的时候无法却分首字母是大写还是小写,
所以jackson统一用java的规范假设成小写,所以会出现"a1"。
而@JsonProperty又指定了需要转换一个首字母大写的"A1",所以jackson又转出一个"A1"。
解决:
在转换的类的上面加上注解:
@JsonAutoDetect(fieldVisibility= JsonAutoDetect.Visibility.ANY,getterVisibility= JsonAutoDetect.Visibility.NONE)
意思是 对于所有修饰的field都进行识别,即 private,public,protected都会被识别。
对所有的getter方法都不进行识别,所以就不会识别出小写的"a1"。
照道理还需要加上setterVisibility的设置,不过经过测试,貌似不需要。
该问题还有一种体现, @JsonIgnore 注解失效。
@Getter
@Setter
@Accessors(chain= true)public static classTestPO{
@JsonIgnoreprivateString aaa; //全部小写
@JsonIgnoreprivateString Bbb; //第一个字母大写
@JsonIgnoreprivateString DDd; //前两个字母大写(其实,以大写字母开头的任意字符串都会是这种情况)
@JsonIgnoreprivateString eEe; //第一个小写 第二个大写
@JsonIgnoreprivateString ffFff; //前两个字母小写
}
上面这个POJO转换成Json后,打印出:
{"bbb":"2","ddd":"3","eee":"4"}
原因就是大写字母在get方法上让jackson识别出了错误。中间标红的三种大写字母都让识别出错。
解决办法有两种:
第一个办法是,字段名尽量避免中间标红的三种方式。
第二个办法是,在POJO类上加上注解:
@JsonAutoDetect(fieldVisibility= JsonAutoDetect.Visibility.ANY,getterVisibility= JsonAutoDetect.Visibility.NONE)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)