我们有一个包含多组Longs的类。我们希望它们被序列化为数组,大多数客户都这样做。
但是,我们有一个PHP客户端,它创建集合,以便以奇怪的方式序列化。数字4的集合如下:
"setOfNumbers": {
"4": 0
},
当然,杰克逊抱怨这是一个对象,而不是阵列。我想要的是拥有一个自定义反序列化程序,只有在Jackson检测到Set<Long>
应该存在的对象时才会被调用(理想情况下,只有当它们包含在特定的类中时才会被调用。)
我试过这个:
this.addDeserializer(Set.class, new StdDelegatingDeserializer<>(new StdConverter<Map<String, Long>, Set<Long>>() {
@Override
public Set<Long> convert(Map<String, Long> set) {
return parseLongs(set);
}
}));
这个问题是现在它需要一个对象而不是所有Set字段的数组。正在生成反序列化的类,因此我无法添加任何注释或进行其他更改。