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

尽管存在创建者,但Jackson无法反序列化单个字段类

汪志业
2023-03-14

我有以下简单的jUnit测试:

java prettyprint-override">class MyTest {
 
   static class SingleField {
        int rank;
        SingleField(int rank) {
            this.rank = rank;
        }

        @Override
        public boolean equals(Object o) {
            if(!(o instanceof  SingleField)) {
                return  false;
            } else {
                return ((SingleField) o).rank == rank;
            }
        }
    }

   @Test
    public void testBasicJacksonParsing() throws JsonProcessingException {
        assertEquals(new SingleField(3), new ObjectMapper().readValue("{\"rank\" : 3}", SingleField.class));
    }
   
}

不幸的是,在运行时,测试会抛出一个不匹配的PutException,并显示以下消息:

Cannot construct instance of `com.drfirst.gear.user.context.util.AppUtilTest$SingleField` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (String)"{"rank" : 3}"; line: 1, column: 2]

这里公认的答案似乎暗示一个人需要一个全参数构造函数。我显然有一个。我还通过使SingleFieldpublic的构造函数尝试了相同的单元测试,并且我还将更改为String,确保我还更新了我正在解析的String"{\"秩\": 3}""{\"秩\":\"3\"}"。抛出相同的异常

关于我做错了什么的想法?

共有1个答案

梁华清
2023-03-14

原来我的字段需要publicsetter。

 类似资料:
  • 当用Jackson反序列化LocationGeneric时,我在Kotlin中遇到了以下问题。在这种情况下,我没有向用于构造具体类的抽象类添加额外信息。当我反序列化位置一或位置二时,它工作得很好。 这是我写的代码: 这是我遇到的错误: 无法构造的实例(尽管至少存在一个Creator):无法从Object值反序列化(没有基于委托或属性的Creator) 我尝试将抽象类更改为开放类,但到目前为止没有成

  • 我有这样一门课: 我知道基于typeToClassId的对象obj是什么类型,不幸的是只有在运行时才知道。 我想基于typeToClassId解析出obj——这里最好的方法是什么?注释似乎已经过时了,基于ObjectMapper的东西似乎是对的,但我很难弄清楚最好的方法可能是什么。 类似于类clazz=lookUpClassBasedOnId(typeToClassId)objectMapper的

  • 我有以下xml 我需要将其反序列化为以下POJO: 这里的问题是被包装在元素中

  • 我只是想序列化和反序列化简单的不可变对象,不明白为什么我不能用Jackson来做 它会因异常而失败: 我知道答案应该很简单,但这是最常见的情况,应该从盒子里起作用,不是吗?

  • 我希望获得以下输出:(我所要做的就是删除字段名,但保留其子字段名。) 以下是我的POJO,由使用: 下面是MAP在搜索过程中使用的我的: null 是否有一种方法可以使它与和一起使用,因为我不能同时使用这两种方法。 有人能帮忙解决这个问题吗?请指导我适当的文档或变通方法,非常感谢。

  • 问题内容: 我正在尝试使用Jackson将json数据转换为POJO对象。这是MainActivity和我的POJO类代码。我基本上收到了JsonMappingException错误。我还附上了整个日志。 MainActivity.java: Entries.java(这是POJO) 现在,我的日志中出现以下错误。因此,我无法继续工作。这是日志: 问题答案: 在 条目* 和 电话中 删除构造函数