gpt4 book ai didi

java - 使用 Jackson : Can we have optional variables in a POJO 解析 JSON

转载 作者:行者123 更新时间:2023-11-30 06:43:52 25 4
gpt4 key购买 nike

我有一个包含以下变量的 POJO。

private Long poId;
private String nodeName;
private String fingerPrint;
private String hardwareResourceName;
private String sequenceNumber;
private String importedOn;
private String importedBy;
private String generated;
private String installedOn;
private String currentLicense;
private String productType;

哪个用于解析有关许可文件的详细信息?当我们调用某些休息端点时,我们会收到以下 JSON 响应。

[{"nodeName":"LTE02ERBS00042","fingerprint":"LTE02ERBS00042_fp","hardwareResourceName":"ELSN","generatedOn":"1251359414000","installedOn":"","currentLicense":"false","sequenceNumber":9000,"importedOn":"1531929161227","poId":281475302769484,"filePath":"/home/smrs/smrsroot/licence/LTE02ERBS00042_fp/LTE02ERBS00042_fp_151008_060941.xml","importBy":"agatAdm7160","neType":"ERBS","platformType":"CPP"}

正如您从 JSON 中看到的那样,在对 POJO 的响应中返回的内容存在不匹配,例如:from pojo: fingerPrint from JSON: fingerprint。 JSON 还具有不在 POJO 中的额外字段。 POJO 用于其他领域,所以我不想更改现有功能。我想添加额外的字段以适应返回数据的变化,而不必创建单独的 POJO。

有没有一种方法可以使用注释将 POJO 中的变量设置为可选或不总是需要的?因此,在我们收到包含所有变量的 JSON 响应的情况下,如果响应仅包含某些数据,它也可以工作。

最佳答案

我可以考虑两种方法,它们并不相互排斥。

Is there a way with annotations that I can set a variable in the POJO to be optional or not always needed?

您可以将非映射属性存储在 Map<String, Object> 中:

private Map<String, Object> otherProperties = new HashMap<String, Object>();

然后使用一个用 @JsonAnySetter 注释的方法:

@JsonAnySetter
public void setOtherProperty(String key, Object value) {
otherProperties.put(key, value);
}

如果您需要执行此类属性的序列化,请使用带有 @JsonAnyGetter 注释的方法:

@JsonAnyGetter
public Map<String, String> getOtherProperties() {
return otherProperties;
}

I would like to add extra fields to accommodate the change in the data being returned, without having to create a separate POJO.

如果您知道属性名称的可能变体,您可以使用 @JsonAlias ,在 Jackson 2.9 中引入:

@JsonAlias({ "fingerprint", "fingerPrint" })
private String fingerprint;

关于java - 使用 Jackson : Can we have optional variables in a POJO 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51635330/

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