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

具有匿名类的Jackson反序列化

夹谷野
2023-03-14

我整天都在寻找答案,但到目前为止我还没有太多的运气。

我的问题很简单:如何使用Jackson正确反序列化匿名对象。

private interface Interface1
{
    int getValue();
}

public static void testAnonymousObject() throws IOException
{
    ObjectMapper mapper = new ObjectMapper();

    mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
    mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
    mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

    Interface1 testObject = new Interface1()
    {
        private final int value = 5;

        @Override
        public int getValue()
        {
           return value;
        }
    };

    String json = mapper.writeValueAsString(testObject);
    System.out.println("JSON = " + json);

    Interface1 received = (Interface1) mapper.readValue(json, Object.class);
    System.out.println(received);
}

它的输出是:JSON=[“com.foo.test.JacksonTest$1”,{“value”:5}],然后我得到一个异常:

线程“main”com.fasterxml.jackson.databind.JSONMappingException中出现异常:无法将类com.foo.test.jacksonTest$1(类型为local/anonymous)反序列化为bean。

编辑只是为了澄清,Jackson和XStream都能够序列化对象。但似乎只有XStream能够反序列化对象。因此可以使这种情况发生。

共有1个答案

吕志诚
2023-03-14

到我写这篇文章的时候,Jackson似乎没有正确地序列化内部类或匿名类。而其他包(如XStream和Kryo)则会这样做。

 类似资料:
  • 问题内容: 我整天都在寻找可以解决这个问题的东西,但是到目前为止我还没有碰到很多运气。 我的问题很简单:如何使用Jackson正确反序列化匿名对象。 在出现异常之前,此输出为:JSON = [“ com.foo.test.JacksonTest $ 1”,{“ value”:5}]: 线程“主”中的异常com.fasterxml.jackson.databind.JsonMappingExcept

  • 我有以下Jackson注释类(Kotlin) 我试图反序列化不包含类型属性的JSON,但我提供了具体的类,所以这无关紧要 无论如何,当尝试解析...的子类型时,我得到

  • 问题内容: 我有一个REST API,它返回JSON响应为: 有时它返回: 我有一个像这样的POJO: 那么,有没有一种方法(不是写你自己的其他 自定义解串器 中)Jackson2,这将有助于我映射在JSON来时,它的A型和类型时,它是一个JSON对象? 或者换句话说,在Jackson中,有没有一种方法可以按变量而不是by 映射? 问题答案: 我可以建议您像这样使用JsonNode: 或像这样 :

  • 问题内容: 是否可以在Java中对匿名类进行Seaalal / Deearialize? 例: 我的问题是我想执行一些自定义管理任务,因此我不需要为每个任务发布版本。所以我想做的是- 通过Groovy脚本引擎通过HTTP端点发布自定义任务,并将它们序列化为db以及时运行它们。 问题答案: 可能是危险的。匿名类的名称/数量由编译器生成,并基于它们在文件中出现的顺序。例如,如果您交换两个类的顺序,它们

  • 好的,我知道有一堆类似的问题,但似乎都行不通。 我为我的实体设置了以下结构。 在我的控制器中,我尝试将一个请求映射到下面的方法。 请尝试%1 我认为它是这样做的--添加了一个元数据属性,该属性将存储子类类。 结果是什么。 结果是什么。 即使将和添加到这两个子类中,也会得到相同的结果。 其他尝试 我试了很多。什么都不起作用。不会包含这里的所有内容。 我觉得应该有一个简单的方法来做到这一点,但我只是不

  • 我正在尝试使用JSON ObjectMapper反序列化对象。我在尝试反序列化时看到以下错误