java - Jackson - 仅对特定的 JSON 使用自定义反序列化器

标签 java jackson

我们有一个包含多个多头集合的类。我们希望将它们序列化为数组,大多数客户都这样做。

但是,我们有一个 PHP 客户端,它创建的集合以一种奇怪的方式序列化。一个数字为 4 的集合是这样的:

"setOfNumbers": {
  "4": 0
},

自然地,Jackson 提示这是一个对象而不是数组。我想要的是拥有一个自定义反序列化器,仅当 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 注释,如本 example 所示。

关于java - Jackson - 仅对特定的 JSON 使用自定义反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28707138/

相关文章:

java - GWT 使用 EventBus 和 ActivityMapper 更新主要内容 - GWT 可以帮助我更干净地完成这项工作吗?

java - 如何在不打破MVP模式的情况下使用Room?

Java - 写入 XML 文件时缩进除第一个元素以外的所有内容

java - 如何在java中生成html页面的pdf

java - Jackson JSON 解析器无效的 utf-8 起始字节

java - Tomcat 7 Jersey Jackson 200 OK 但有效载荷被剥离

java - 异常 : "org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token"

java - 如何将组件限制在某个位置

java - 为什么合并我的代码后我的 @JsonAlias 不起作用?

java - 没有名称/前缀的 Jackson QName 序列化