我在jackson中有一个bean,它使用@JSonAnySetter方法在地图中存储所有未知参数。
@JSonAnySetter
handleUnkowns(String k, Object v)
{
myMap.put(k,v);
}
我将其用作所有数据类型的“基础bean”,因此如果数据丢失,则填充未知参数并且数据不会丢失....而不是jackson崩溃。
但是,我希望这些未知数的序列化形式不能嵌套 - 也就是说 - 当序列化对象时,我希望序列化参数位于对象的顶层。另外,我希望自定义字段也可以序列化:
//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中的“field”。
因此预期的JSON序列化将是
{“collarWidth”:10“unknownParameters”:{“name”:“fido”}}
而不是
{“collarWidth”:10“name”:“fido”}
那么 - 将未知参数与已知参数“合并”的最简单方法是什么,以便java bean序列化程序保留与输入字符串相同的嵌套?
显而易见的解决方案是将“myMap”对象中的参数与序列化地图合并,但这看起来有点过分,我认为这个问题可能有更优雅的解决方案。
答案 0 :(得分:1)
您是否签出了@JsonAnyGetter
注释?该方法返回的地图将被解包,以使其与@JsonAnySetter
一起使用。 This blog entry解释了用法。