当前位置: 首页 > 知识库问答 >
问题:

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

周鸿光
2023-03-14

有没有一种方法可以指定不同的序列化/反序列化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
public class PrivacySettings {
    @JsonSetter("CDO_Name__c")    
    @JsonGetter("chiefDataOfficerName")    
    private String chiefDataOfficerName;
}    

但这当然是不成立的。

共有1个答案

杨晓博
2023-03-14

我特别不认为在这种情况下用一个吸气手和一个二传手有什么问题。

但是,如果您想尝试一下,由于V0.11.8Lombok支持一个试验性特性,向生成的getter和setter添加注释。请参阅文档:

要在生成的方法上添加批注,可以使用onmethod=@__({@annotationshere});若要在生成的setter方法的唯一参数上添加批注,可以使用onparam=@__({@annotationshere})。不过要小心!这是一个实验性的特征。有关更多详细信息,请参阅有关onX特性的文档。

public class PrivacySettings {

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

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

有关详细信息,请查看@getter@setter文档。有关@__()的详细信息,请参阅此答案。

 类似资料:
  • I'va是一个OID接口,可以由许多具体类型实现: 现在我有一个具有两个字段的对象,一个使用抽象接口类型(OID)定义,另一个使用具体类型(MyOID)定义 我想使用jackson以不同的方式序列化/反序列化字段,无论它们是使用抽象接口类型还是具体类型定义的: 注意,被序列化,包括类型信息(多态序列化),而被序列化为文本 为此,我将OID接口注释为: 并为每个具体类型分配了类型id: 最后,对容器

  • 我需要编写一个方法,它接受一些对象、给定对象的类中存在的一些字段名和一些字段值。该值是字段的JSON序列化形式。该方法将获取该值并相应地反序列化它,如下所示: (我实际上只需要检索反序列化的值,而不需要重新设置它,但这使它成为一个更好的示例。)只要Jackson默认的反序列化足够,这就行了。现在让我们假设我有一个带有自定义(de)序列化程序的类: 一个可能的解决方案是手动检查注释。但是,我真的不想

  • 我想反序列化表单中的类: 其中文本是加密的,反序列化应该在重建TestFieldEncryptedMessage实例之前取消对值的加密。 我采用的方法非常类似于:https://github.com/codesqueak/jackson-json-crypto 也就是说,我正在构建一个扩展SimpleModule的模块: 如您所见,设置了两个修饰符:EncryptedSerializerModif

  • 问题内容: 我有一堂课 我想将下面的JSON数据反序列化到上面的类/对象中 我的想法是在JSON中是一个对象,但我只想获取(在JSON中)在反序列化期间将像在类中那样传递。 如何使用Json.NET实现该目标? 我相信我可以使用CustomJsonConverter完成它。但是我很困惑。docs中的示例仅用于,但不适用。 问题答案: 我只是使用上面在问题中提到的方法解决了我的问题。在我完整的代码下

  • 我有一个JSON作为字符串,我将其反序列化并实例化为scala的MyPOJO case类。我的数据是YYYY-MM-DD格式,但POJO createdBy中的实际属性是LocalDateTime。 如何在实例化Pojo时指定默认时间值2020-03-02 00:00:00, 序列化应返回yyyy-mm-dd格式。我的序列化和反序列化格式不同。 我尝试过自定义序列化和反序列化,如下所示,但由于缺少

  • 我想通过扩展默认的反序列化器来创建自己的反序列化器,在其后面设置更多的值: 如您所见,我还想将此DTO母类重用于其他DTO。 我没有找到任何这样的例子。我真的是世界上第一个 反序列化的“AsUsual”(p,ctxt)应该是什么 我应该使用什么motherclass?JsonDeserializer/StdDeserializer/UntypedObjectDeserializer 反序列化程序会