Jackson JSON 在嵌套类的集合上给出了异常
2022-09-04 03:19:23
Jackson JSON 在序列化/反序列化此类时没有问题:
public class MyClass {
public class Nested {
public String string;
public Nested() {}
}
public Nested nestedVar;
}
但是在这个问题上:
public class MyClass {
class Nested {
public String string;
public Nested() {}
}
public Nested nestedVar;
public List<Nested> nestedList;
}
我在反序列化时得到这个例外:
com.fasterxml.jackson.databind.JsonMappingException:没有找到适合类型 [simple type, class test.MyClass$Nested]:无法从 JSON 对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息?)位于 [Source: java.io.StringReader@26653222; 行: 1,列: 48] (通过引用链: test.MyClass[“nestedList”]->java.util.ArrayList[0])
在第一种情况下,Jackson 在处理嵌套类的实例时没有问题,但在第二种情况下没有问题。
我必须编写自定义反序列化程序吗?
测试代码 (Jackson 2.6.3):
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
public class ATest {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
StringWriter sw = new StringWriter();
MyClass myClass = new MyClass();
MyClass.Nested nestedVar = myClass.new Nested();
List<MyClass.Nested> nestedList = new ArrayList<>();
nestedList.add(nestedVar);
myClass.nestedList =nestedList;
myClass.nestedVar = nestedVar;
mapper.writeValue(sw, myClass);
System.out.println(sw.toString());
StringReader sr = new StringReader(sw.toString());
MyClass z = mapper.readValue(sr, MyClass.class);
}
}