gpt4 book ai didi

Java:如何构造或模式化一个类,以便我们可以在运行时映射组合对象?

转载 作者:行者123 更新时间:2023-12-01 19:32:00 25 4
gpt4 key购买 nike

使用一个rest api,它返回json,每个端点有一些固定的格式和其他变化。我正在使用 gson 库,它将传入的 json 映射到 java 类。

所以我有以下抽象资源:

@Getter
@Setter
public class AbstractResource {
@SerializedName("Meta")
@Expose
private List<Meta> meta = null;
@SerializedName("Body")
@Expose
private List<AbstractBody> body = null;

AbstractBody 包含以下内容:

public class AbstractBody {
@SerializedName("Body")
@Expose
private Computer computer = null;
@SerializedName("Links")
@Expose
private List<Link> links = null;

AbstractResource 对于所有端点都是通用的,但在抽象主体中,它在一个端点中返回计算机,在其他端点中返回许可证,其他端点返回集群。全部都来自 json 的 Body 字段。因此每次 AbstractBody 发生更改时。

目前我必须在不同的包中一次又一次地制作这两个类。所以主要的事情是这样的。

 ComputerResource agreement = gson.fromJson(json, ComputerResource .class);

我想为abstractresoource和abstractbody制作通用包,并且在运行时它应该决定应该进入哪个类。

我如何修改上面的结构来做到这一点?

最佳答案

您可以使用TypeToken :

Represents a generic type T. Subclassing TypeToken allows for type information to be preserved at runtime.

假设我们有两个 JSON 结构:

{"meta": "value", "body": {"license": "true"}}
{"meta": "value", "body": {"computer": "true"}}

它们由通用类 AbstractResource 表示

public class AbstractResource<T> {
private String meta;
private T body;
}
public class Computer {
private boolean computer;
}
public class License {
private boolean license;
}

反序列化时,Gson需要被告知如何处理可以通过 TypeToken 提供的通用主体:

Type computer = new TypeToken<AbstractResource<Computer>>() {}.getType();
AbstractResource<Computer> resource = g.fromJson(json, computer);

Type license = new TypeToken<AbstractResource<License>>() {}.getType();
AbstractResource<License> resource = g.fromJson(json, license);

这允许将任意嵌套结构反序列化到通用字段中 body类型 T 。通过更改body,它可以轻松地适应处理嵌套结构列表。 s 输入 List<T> .

关于Java:如何构造或模式化一个类,以便我们可以在运行时映射组合对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59467458/

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