当前位置: 首页 > 面试题库 >

找不到类型[简单类型,类com.comcast.ivr.core.domain.AutoHandlingSlotKey]的(地图)密钥反序列化器

秦育
2023-03-14
问题内容

我有一个具有Map的域对象:

private Map<AutoHandlingSlotKey, LinkedHashSet<AutoFunction>> autoHandling;

当我序列化对象时,得到以下信息:

"autoHandling" : [ "java.util.HashMap", {
} ],

该地图的键是一个自定义对象:

public class AutoHandlingSlotKey implements Serializable {
    private FunctionalArea slot; // ENUM
    private String returnView;   // ENUM

因此,我不确定在反序列化对象时如何解决这个问题,我将不断纠正:

org.codehaus.jackson.map.JsonMappingException: Can not find a (Map) Key deserializer for type [simple type, class com.comcast.ivr.core.domain.AutoHandlingSlotKey]

有人能帮我可以了解如何解决此问题,如果我 能够访问域对象要修改?


问题答案:

默认情况下,Jackson尝试将Java Maps序列化为JSON对象(键/值对),因此Map
key对象必须以某种方式序列化为String;并且必须有匹配的(和注册的)密钥解串器。默认配置仅支持一小部分JDK类型(字符串,数字,枚举)。因此,映射器不知道如何获取String并从中创建AutoHandlingSlotKey。(实际上,令我惊讶的是序列化程序没有因相同的原因而失败)

解决此问题的两种明显方法是:

  • 实施并注册“密钥反序列化器”
  • 为地图实现并注册自定义反序列化器。

就您而言,做前者可能更容易。您可能还需要实现自定义密钥序列化程序,以确保密钥是正确格式的序列化程序。

注册序列化器和解串器的最简单方法是在Jackson
1.7中添加的模块接口(并在1.8中扩展以支持关键序列化器/解串器)。



 类似资料:
  • 我正在尝试从我的网站获取JSON数据,并使用REST API 2。但当我运行应用程序时,此错误消息显示: 找不到类型[简单类型,类com.example.app.ReferralApiModel]的(Map)键反序列化器 我正在使用改装库。 这是我的改装电话代码: 这是我的ReferralsPlaceHolderApi类: 这也是我的参考模型课程: 这是我试图获取的json数据: 有人能帮我吗?。

  • 序列化和反序列化的方式不同于 我已经创建了两个序列化程序 和 我用Jackson查看了序列化/反序列化映射 ,但找不到解决方案。

  • 问题内容: 我正在使用jackson库将JSON映射到对象中。我已经简化了问题 很多 ,这是发生了什么: 我正在解析一个空的JSON字符串: 在上,出现以下异常: 当我在类中有 两个 返回a的方法时,就会发生这种情况。删除其中一种方法不会导致异常。 实际上,我对映射器查看方法的事实感到惊讶,它应该设置我指示的字段。 这是怎么回事 问题答案: 我通过将转换为来解决此问题:

  • 下面是我的项目的实体类 这是会话表 这里是用户实体 我正在使用JPARepository在我的mysql数据库中保存训练和会话对象 但每当我保存训练对象或会话对象时 我得到了错误 我谷歌了它,发现我需要序列化和反序列化手动…但我不知道怎么做…请帮帮我..

  • 我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?

  • 问题内容: 我正在尝试制作一个使用Jackson来反序列化POJO的类。 看起来像这样… 我对此实施有2个问题。 首先是我将类类型传递给方法,以便对象映射器知道应反序列化的类型。有使用泛型的更好方法吗? 同样在get方法中,我将一个从objectMapper返回的对象强制转换为T。这看起来特别讨厌,因为我必须在此处强制转换T,然后还必须从调用它的方法中强制转换对象类型。 我在该项目中使用了Robo