Json 使用lombok自定义序列化和反序列化字段名

Json 使用lombok自定义序列化和反序列化字段名,json,jackson,lombok,Json,Jackson,Lombok,有没有一种方法可以指定不同的序列化/反序列化JSON字段名,而不必显式地写出getter和setter方法(可能使用lombok getter和setter) 与此类似,以下代码允许将传入的JSON反序列化为不同的POJO字段名。它还会导致POJO字段名按原样序列化: public class PrivacySettings { private String chiefDataOfficerName; @JsonProperty("CDO_Name__c") priva

有没有一种方法可以指定不同的序列化/反序列化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;
    }
}
这看起来很冗长,但我还没能让@Getter和@Setter使用它。我确实看到Jackson支持@jsonaas,这在这个特定示例中可能会有所帮助,但我还需要使用不同的名称进行序列化

看起来这应该很简单,比如:

@Getter
@Setter
public class PrivacySettings {
    @JsonSetter("CDO_Name__c")    
    @JsonGetter("chiefDataOfficerName")    
    private String chiefDataOfficerName;
}    

但这当然是无效的。

我特别认为在这种情况下,getter和setter没有任何错误


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

要在生成的方法上添加注释,您可以使用
onMethod=@uu({@AnnotationsHere})
;若要在生成的setter方法的唯一参数上添加注释,可以使用
onParam=@uu({@AnnotationsHere})
。不过要小心!这是一个实验特性。有关更多详细信息,请参阅有关该功能的文档

此功能的语法取决于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;        
}

有关更多详细信息,请查看和文档。另请参见此部分,以了解有关
@uuuuo()

的详细信息。您共享的想法看起来不错,但我认为您共享的示例链接是唯一受支持的方法。