Gson错误: 【声明了多个名为 userId 的字段】
public class Animal {
private Integer userId;
}
// 猫咪继承动物类
public class Cat extends Animal {
private String userId;
public Cat(String userId) {
this.userId = userId;
}
}
由于cat类和animal类都有一个相同的字段 userId,在使用Gson打印的时候就会报错。
public class JsonDemo {
public static void main(String[] args) {
Cat cat = new Cat();
cat.setUserId("mimi");
System.out.println(JSON.toJSONString(cat));
System.out.println(new Gson().toJson(cat));
}
}
我总结有4种解决方式:
-
既然使用它打印会报错,那就不用它。 使用JSON.toJSONString(); 上面也验证了,使用这个不会报错
-
在父类的字段前加transient,不让这个字段被序列化
-
使用注解@Expose, 使字段不被序列化或反序列化
-
简单粗暴,删掉冗余的字段(实体类定义在本地或可修改)。
(不过这个方式有时候并不可行。 RPC调用服务接口返回的实体里的属性你怎么能修改呢)