gpt4 book ai didi

java - Genson 1.4 (JSON) 不处理继承的 Pojo 的

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:48 24 4
gpt4 key购买 nike

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

这是我的基础对象

This is my BaseObject

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

这是我的 child 类(class)

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}

JSON 中缺少

CountryCodeareaCodelocalNumber,仅处理基类。在这样的代码中尝试了相同的操作

    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);

输出与其余服务中的输出相同。

最佳答案

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

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

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

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

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

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

关于java - Genson 1.4 (JSON) 不处理继承的 Pojo 的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38656021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com