代码之家  ›  专栏  ›  技术社区  ›  Nathan

将实现映射为bean的类反序列化

  •  0
  • Nathan  · 技术社区  · 3 年前

    这个 Playlist 类实现 Map<String, Object> .Jackson将子对象反序列化为 LinkedHashMap 然后打电话 Map.put() .这会引发异常,因为 地图put() 实现正在尝试分配 LinkedHashMap 到另一种类型的字段。杰克逊打来电话 地图put() 因为它使用的是 MapDeserializer .如何更改反序列化程序以避免调用 地图put() ?

    我想如果我告诉Jackson使用 BeanDeserializer 而不是 映射反序列化程序 ,那么一切都将毫无问题地反序列化。有更好的办法吗?

    尝试#1

    我创造了一个 JsonDeserializer 并超越 deserialize() 使用此代码:

    return BeanDeserializerFactory.instance.
       createBeanDeserializer(context, m_type, m_description).
       deserialize(parser, context);
    

    不幸的是,这会 com.fasterxml.jackson.databind.exc.MismatchedInputException: No _valueDeserializer assigned 1.我不知道如何分配 _valueDeserializer .

    尝试#2

    然后我创建了一个 BeanDeserializerModifier 并超越 modifyMapDeserializer() 使用此代码:

    DeserializationContext context;
    
    if (!type.equals(m_type))
    {
       return deserializer;
    }
             
    context = ??????;
    
    try
    {
       return BeanDeserializerFactory.instance.createBeanDeserializer(context, type, beanDesc);
    }
    catch (JsonMappingException caught)
    {
       throw new UncheckedIOException(caught);
    }
    

    不幸的是,我不知道如何获得 DeserializationContext .

    0 回复  |  直到 3 年前