gpt4 book ai didi

json - 使用 lombok 自定义序列化和反序列化字段名称

转载 作者:行者123 更新时间:2023-12-04 12:17:41 30 4
gpt4 key购买 nike

有没有一种方法可以指定不同的序列化/反序列化 JSON 字段名称,而不必显式写出 getter 和 setter 方法,也许使用 lombok getter 和 setter?

与此类似 example ,以下代码允许将传入的 JSON 反序列化为不同的 POJO 字段名称。它还导致 POJO 字段名称按原样序列化:

public class PrivacySettings {
private String chiefDataOfficerName;

@JsonProperty("CDO_Name__c")
private void setChiefDataOfficerName(String chiefDataOfficerName) {
this.chiefDataOfficerName = chiefDataOfficerName;
}

@JsonProperty("chiefDataOfficerName")
private String getChiefDataOfficerName() {
return chiefDataOfficerName;
}
}

这看起来很冗长,但我无法让它与 @Getter 和 @Setter 一起使用。我确实看到 Jackson 支持 @JsonAlias,这在这个特定示例中可能会有所帮助,但我还需要使用不同的名称进行序列化。

看起来这应该很简单,比如:
@Getter
@Setter
public class PrivacySettings {
@JsonSetter("CDO_Name__c")
@JsonGetter("chiefDataOfficerName")
private String chiefDataOfficerName;
}

但这当然是无效的。

最佳答案

在这种情况下,我特别认为 getter 和 setter 没有任何问题。

但是,如果您想尝试,由于 v0.11.8 Lombok 支持 experimental feature为生成的 getter 和 setter 添加注释。见 documentation :

To put annotations on the generated method, you can use onMethod=@__({@AnnotationsHere}); to put annotations on the only parameter of a generated setter method, you can use onParam=@__({@AnnotationsHere}). Be careful though! This is an experimental feature. For more details see the documentation on the onX feature.



此功能的语法取决于 JDK 版本。对于 JDK 8,您将拥有:
public class PrivacySettings {

@Setter(onMethod_ = { @JsonSetter("CDO_Name__c") })
@Getter(onMethod_ = { @JsonGetter("chiefDataOfficerName") })
private String chiefDataOfficerName;
}

对于 JDK 7,语法是:
public class PrivacySettings {

@Setter(onMethod = @__({ @JsonSetter("CDO_Name__c") }))
@Getter(onMethod = @__({ @JsonGetter("chiefDataOfficerName") }))
private String chiefDataOfficerName;
}

有关更多详细信息,请查看 @Getter @Setter 文档。另见此 answer详情 @__() .

关于json - 使用 lombok 自定义序列化和反序列化字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49886553/

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