rim*_*sky 4 json jackson lombok
有没有办法指定不同的序列化/反序列化 JSON 字段名称,而不必显式写出 getter 和 setter 方法,也许使用 lombok getter 和 setter?
与此示例类似,以下代码允许将传入的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这看起来很冗长,但我无法让它与 @Getter 和 @Setter 一起使用。我确实看到 Jackson 支持 @JsonAlias,这在这个特定示例中可能会有所帮助,但我还需要使用不同的名称进行序列化。
看起来这应该很简单,比如:
@Getter
@Setter
public class PrivacySettings {
@JsonSetter("CDO_Name__c")
@JsonGetter("chiefDataOfficerName")
private String chiefDataOfficerName;
}
Run Code Online (Sandbox Code Playgroud)
但这当然是无效的。
在这种情况下,我特别认为 getter 和 setter 没有任何问题。
但是,如果您想尝试,因为 v0.11.8 Lombok 支持一项实验性功能,可以为生成的 getter 和 setter 添加注释。请参阅文档:
要在生成的方法上添加注释,您可以使用
onMethod=@__({@AnnotationsHere}); 要将注释放在生成的 setter 方法的唯一参数上,您可以使用onParam=@__({@AnnotationsHere}). 不过要小心!这是一个实验性功能。有关更多详细信息,请参阅onX功能的文档。
此功能的语法取决于 JDK 版本。对于 JDK 8,您将拥有:
public class PrivacySettings {
@Setter(onMethod_ = { @JsonSetter("CDO_Name__c") })
@Getter(onMethod_ = { @JsonGetter("chiefDataOfficerName") })
private String chiefDataOfficerName;
}
Run Code Online (Sandbox Code Playgroud)
对于 JDK 7,语法是:
public class PrivacySettings {
@Setter(onMethod = @__({ @JsonSetter("CDO_Name__c") }))
@Getter(onMethod = @__({ @JsonGetter("chiefDataOfficerName") }))
private String chiefDataOfficerName;
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看@Getter和@Setter文档。另请参阅此答案以了解有关@__().
| 归档时间: |
|
| 查看次数: |
2953 次 |
| 最近记录: |