踩坑过程
Coding时,我需要构建一个柱状图的json数据结构吐给前端。图表用的是百度的Echarts图形库,表结构里,有一个表示纵坐标的属性叫yAxisIndex。很自然的,我在bean对象里面有一个这样的属性:private Integer yAxisIndex;但是发现,在使用Gson序列化之后,就变成了yaxisIndex的样子。研究后发现,如果变量里面包含单个字母时,Gson在解析时就会把这个单个字母和后面的单词作为一个整体进行转义。
问题
这个问题其实可以归结为一个常见的问题,就是在使用Gson进行序列化和反序列化时候,自己定义的java对象里的属性名跟json里的字段名不一致的问题。场景如下:
json结构
{
"name": "xiaoming",
"sex": "male",
"address": "shanghai"
}
bean结构
public class Person {
private String name;
private String sex;
private String addr;
}
我们发现,json中表示地址的字段是address,而在类中,属性命名则是缩写addr,这就带来了不一致的问题。
解决方案
使用Gson提供的注解@SerializedName,使用方法如下:
public class Person {
private String name;
private String sex;
@SerializedName("address")
private String add;
}
这样,在序列化和反序列化的时候,就会相互自动match了,同时也解决了我遇到的那个坑。