jackson 转 json时,字段名大小写问题

您所在的位置:网站首页 Jackson解析json jackson 转 json时,字段名大小写问题

jackson 转 json时,字段名大小写问题

2023-04-22 01:15| 来源: 网络整理| 查看: 265

现象:

 

分析:

从图中,我们可以看到 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 class TestPO{ @JsonIgnore private String aaa;      //全部小写 @JsonIgnore private String Bbb;      //第一个字母大写 @JsonIgnore private String DDd;      //前两个字母大写(其实,以大写字母开头的任意字符串都会是这种情况) @JsonIgnore private String eEe;      //第一个小写 第二个大写 @JsonIgnore private String ffFff;     //前两个字母小写 }

上面这个POJO转换成Json后,打印出:

{"bbb":"2","ddd":"3","eee":"4"}

原因就是大写字母在get方法上让jackson识别出了错误。中间标红的三种大写字母都让识别出错。

解决办法有两种:

第一个办法是,字段名尽量避免中间标红的三种方式。

第二个办法是,在POJO类上加上注解:

@JsonAutoDetect(fieldVisibility= JsonAutoDetect.Visibility.ANY,getterVisibility= JsonAutoDetect.Visibility.NONE)

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3