【问题标题】:How does jackson serialize a map with custom getters/setters ?jackson 如何使用自定义 getter/setter 序列化地图?
【发布时间】:2012-01-25 20:36:52
【问题描述】:

我在 jackson 中有一个 bean,它使用 @JSonAnySetter 方法将所有未知参数存储在地图中。

@JSonAnySetter
handleUnkowns(String k, Object v) 
{
   myMap.put(k,v); 
}

我将它用作我所有数据类型的“基础 bean”,因此如果数据丢失,未知参数会被填充并且数据不会丢失......而不是杰克逊崩溃。

但是,我希望这些未知数的序列化形式不被嵌套 - 也就是说 - 当对象被序列化时,我希望序列化参数位于对象的顶层。此外,我希望自定义字段也被序列化:

//I want this map to be serialized/deserialized : {"collarWidth":10 "name":"fido"}
class Dog extens JSonBean 
{
     int collarWidth=0;
     getCollarWidth(){return collarWidth;}
     setCollarWidth(int x){collarWidth=x;}
}

请注意,在上述情况下 - 由于我从 Map 扩展,Jackson 的自定义 Map 序列化将发生,并且 unknownParameters 将是我的 json 中的“字段”。

因此预期的 JSON 序列化将是
{"collarWidth":10 "unknownParameters":{"name":"fido"}}

而不是

{"collarWidth":10 "name":"fido"}

那么 - 将未知参数与已知参数“合并”的最简单方法是什么,以便 java bean 序列化程序保留与输入字符串相同的嵌套?

显而易见的解决方案是将“myMap”对象中的参数与序列化地图合并,但这似乎有点过头了,我认为这个问题可能有一个更优雅的解决方案。

【问题讨论】:

标签: java reflection map jackson


【解决方案1】:

你签出@JsonAnyGetter注解了吗?该方法返回的映射将被解包,以使其与@JsonAnySetter 一起使用。 This blog entry 解释用法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2014-08-02
    • 2011-11-01
    • 2013-10-10
    • 2017-03-02
    相关资源
    最近更新 更多