繁体   English   中英

Jackson - 仅针对特定JSON使用自定义反序列化程序

[英]Jackson - Use custom deserializer only for specific JSON

我们有一个包含多个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字段的数组。 正在生成反序列化的类,因此我无法添加任何注释或进行其他更改。

如果生成的类始终具有相同的名称,则可以尝试使用Json Jackson Mix-in注释,如本所示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM