繁体   English   中英

如何从只读基础 class 覆盖 JSON 字段并改用子字段?

[英]How to override JSON field from read-only base class and use child field instead?

我有一个基础 class(只读)来从外部 API 获取数据:

public class Manager {
 // so many fields
 public User user;
 // ...
}

由于字段用户丢失了一些字段,所以我需要创建新用户 class。

public class NewUser extends com.readonly.User {

    public String avatarUrl;
    public String fullname;
    public String address;
    // ....
}

然后我创建NewManager并使用它从 API 中获取数据。

public class NewManager extends com.readonly.Manager {
 // so many fields
 public NewUser user;
 // ...
}

但我得到了错误:

java.lang.IllegalArgumentException: class com.sovannarith.model.NewManager declares multiple JSON fields named user
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:172) ~[gson-2.8.6.jar:na]
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102) ~[gson-2.8.6.jar:na]
    at com.google.gson.Gson.getAdapter(Gson.java:458) ~[gson-2.8.6.jar:na]
    at com.google.gson.Gson.fromJson(Gson.java:931) ~[gson-2.8.6.jar:na]

笔记

  • API 有字段名为:用户
  • Manager.classNewManager.class中都有名为user的字段
  • 我想使用NewUser.class的字段名称用户,而不是User.class

有可能这样做吗?

如果没有严格要求使用GSON,那么尝试使用Jackson(ObjectMapper),它可以序列化具有相同字段名的对象。 (杰克逊好多了恕我直言)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM