簡體   English   中英

在Jackson對象映射器中自定義字段名稱序列化

[英]Customizing Field Name Serialization in Jackson Object Mapper

說我有一個豆:

public class MyBean {
    public String oneMississipi;
    public int myBestFriend;
    //Getters&Setters&Bears,Oh my.
}

而且我正在使用com.fasterxml.Jackson DataBinding將此pojo的實例轉換為json輸出...如何定制字段名稱的序列化,並且可以將其范圍設置為全局/類/字段級別?

例如,我想對我的字段名稱進行反斜杠:

{
    "one-mississipi": "two mississippi",
    "my-best-friend": 42
}

我已經在Google上花費了數小時,甚至瀏覽了傑克遜代碼,以便找出發生字段序列化的位置,但是似乎看不到它可能委派用於自定義字段處理的任何地方。

有沒有人知道此功能的位置(如果有)? 非常感激

實現PropertyNamingStrategy並在解析方法內部使用AnnotatedMethodAnnotatedFieldAnnotatedParameter來獲取聲明類。 然后,您可以在該類上查找任何自定義注釋,並根據其應用任何自定義命名。

這種方法最大的問題是不可能將實際的具體類進行序列化或反序列化,它將始終返回聲明類。 因此,除非您將繼承的成員帶入子類型,否則將無法覆蓋子成員的命名行為。

另一個解決方案是對具有不同命名策略的類使用不同的映射器。 您可以通過創建一個頂級“路由器”映射器來使它或多或少透明,該映射器將決定要使用哪個映射器實例(必須特別注意配置方法和其他與ser / deser不相關的方法)。 假設您將使用有限數量的策略,那么該解決方案也應該可行。

此解決方案的缺點是,您將無法在單個序列化/反序列化運行期間混合使用不同的命名策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM