【问题标题】:Genson 1.4 (JSON) not processing inherited Pojo'sGenson 1.4 (JSON) 不处理继承的 Pojo
【发布时间】:2016-12-04 00:08:35
【问题描述】:

我在我的 REST 实现中使用 genson 1.4 进行 JSON 处理,使用 genson 时 JSON 继承不起作用。请在下面找到示例代码结构。

这是我的基础对象

This is my BaseObject

public class SynBaseObject implements Serializable
{
 private Long status;
//GettersAndSetters
}

这是我的子班

public class PhoneNumber extends SynBaseObject
{
private  String      countryCode;
private  String      areaCode;
private  String      localNumber;
//GettersAndSetters
}

这是我的响应对象

public class ResponseObject  implements Serializable
{ 
private Integer errorCode;
private String errorMessage;
private Long    primaryKey;

private SynBaseObject baseClass;

public ResponseObject()
{

}

public SynBaseObject getBaseObject()
{
return baseClass;
}

public void setBaseObject(SynBaseObject baseClass)
{
this.baseClass = baseClass;
}

public Integer getErrorCode()
{
return errorCode;
}

public void setErrorCode(Integer errorCode)
{
this.errorCode = errorCode;
}

}

这是 GENSON JSON 输出:

{"baseObject":{"status":null},"errorCode":null,"errorMessage":null,"primaryKey":null}

CountryCode,areaCodelocalNumber 在 JSON 中丢失,只处理基类。从这样的代码中尝试过相同的代码

    Genson genson = new Genson();
    PhoneNumber number = new PhoneNumber();
    number.setCountryCode("2");
    number.setAreaCode("3");
    number.setLocalNumber("9645");
    ResponseObject responseObject = new ResponseObject();
    responseObject.setBaseObject(number);
    String serialize = genson.serialize(responseObject);
    System.out.println(serialize);

输出与其余服务相同。

【问题讨论】:

    标签: java json rest inheritance genson


    【解决方案1】:

    默认情况下,Genson 在 ser/de 期间使用静态类型。这意味着它会将对象视为 SynBaseObject 的实例,而不是具体类型 PhoneNumber。

    您可以通过配置告诉 Genson 使用运行时类型:

    Genson genson = new GensonBuilder().useRuntimeType(true).create();
    

    在这里您可以找到一些关于如何customize Genson with Jaxrs 的示例。

    请注意,如果您想反序列化为 ResponseObject,那么您可能会遇到麻烦,因为在 json 中没有关于基础对象的具体类型的信息。但是,如果消费的 json 也是由 Genson 生成的,您可以通过启用类元数据序列化builder.useClassMetadata(true) 轻松解决此问题。

    更多关于 Genson 中 handling of polymorphic 类型的文档。

    【讨论】:

    • 感谢您的回复,它通过代码工作。我如何在我的休息服务中配置 .useRuntimeType(true),就像使用 Genson 1.4 jar 一样。,序列化和反序列化由处理javax.ws.rs 使用 genson 库
    • 要为您的服务配置 genson 实例,请查看此处的文档owlike.github.io/genson/Documentation/Extensions/…,还有一些关于 stackoverflow 的问题,您可以在其中看到有关如何执行此操作的代码 sn-p。喜欢这个stackoverflow.com/questions/38107426/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多