当前位置: 首页 > 知识库问答 >
问题:

如何在映射的映射中使用jackson键序列化器

常温文
2023-03-14
class MainContainer {
    private final Map<String, Object> entries;
}

class Item {
    // a lot of attributes
}

class ItemMapKeySerializer extends JsonSerializer<Item> {
     // serialize an item into something simple for map keys
}

class IntermediateContainer {
     private final Map<Item, ... > someMapping;
}
MainContainer.add("test", new IntermediateContainer(Map.of(new Item(), ...)));
 entries: {
    "test": {
        someMapping: {
            "my nice item 1": {
            ...
            }             
        }
    }
}
MainContainer.add("test", Map.of(new Item(), ...));
 entries: {
    "test": {
        Item@12D23: {  // This kind of fieldname is not desired
        ...
        }             
    }
}

共有1个答案

通远
2023-03-14

应该将“toString()”方法添加到项中。例如,我检查了以下示例:

public static class Item {
    private String val1;
    private int val2;

    public Item(String val1, int val2) {
        this.val1 = val1;
        this.val2 = val2;
    }

    @Override
    public boolean equals(Object obj) {
        return obj instanceof Item && toString().equals(obj.toString());
    }

    @Override
    public int hashCode() {
        return toString().hashCode();
    }

    @Override
    public String toString() {
        return "val1=" + val1 + ",val2=" + val2;
    }
}

这为简单映射wiht项(“AAA”,123)提供了这样的JSON字符串,指向“super!”:

{"val1=AAA,val2=123":"Super!"}

您甚至可以更进一步,使用Item.ToString中的ObjectMapper.WriteValueAsString为键文本生成Item的JSON表示。

 类似资料:
  • 我对Jackson有一个错误的理解,就是将json文件反序列化为poco。这是我的代码: 我的POCO命名为AnimalBean: }还有我的JSON文件: } 当我执行我的代码时,我有以下错误:未识别的字段“动物园”(类动画豆),未标记为可忽略的。我知道问题是我的json文件开始不直接由动物,但我不能改变它,因为它不是我的。我已经尝试把对象apper.configure(Deseriazatio

  • 什么是最好的方法来实现杰克逊? 谢谢

  • 我有以下POJO,可以序列化为字节或。 当试图反序列化正文时,该错误似乎是从请求类生成的: 我怎样才能正确地反序列化地图?

  • 可以序列化/反序列化< code >映射吗 在这种特殊情况下,我知道总是,和 - 第三方类(我有序列化器和反序列化器),其他值是盒装原语。 有可能和杰克逊做这样的事吗?使用MapSerializer/MapDeserializer可以做到这一点吗?(我找不到任何例子)

  • 问题内容: 我有一张看起来像这样的地图: 我的动词类如下: 我想序列化和反序列化我的VerbResult类的实例,但是当我这样做时,出现此错误: 我在网上阅读了您需要告诉杰克逊如何反序列化地图键的信息,但是我没有找到任何信息来解释如何进行此操作。动词类也需要在映射之外进行序列化和反序列化,因此任何解决方案都应保留此功能。 问题答案: 在此处给出的答案的基础上,建议使用反序列化器实现模块。所述Jod