0

我正在使用 JSON Jackson 2.0 将数据模型写入文件,然后将其加载回应用程序。我可以成功地将对象写入字符串,但在尝试将其编组回对象时遇到以下错误消息:

没有为类型 [简单类型,类 ImportAttributeModel] 找到合适的构造函数:无法从 JSON 对象实例化(需要添加/启用类型信息?)在 [来源:用户;行:1,列:111](通过引用链:ImportTemplateModel["modelList"])

这是我的课程的代码片段:

public class ImportTemplateModel 
{  
  private Map<Integer, AttributeModel> m_modelList;
  private GraphElementType m_type; 

  public ImportTemplateModel() 
  {

  }
// getters  & setters
}

public class AttributeModel 
{
   private String m_label;
   private String m_key;
   private ElementDefinition m_definition;

   public AttributeModel(String label, String key, ElementDefinition def)
   {
      m_label = label;
      m_key = key;
      m_definition = def;
   }
// getters  & setters
}

这是我编写和读取模型的调用:

// Write model
ObjectMapper mapper = new ObjectMapper();
ImportTemplateModel itm = new ImportTemplateModel()
// set model atttributes
...
//

try {
  mapper.writeValue(new File(filepath), itm);

} 
catch (IOException e) {

}
.... 

// Read Model
ObjectMapper mapper = new ObjectMapper();
try {
  mapper.readValue(new File(filepath), ImportTemplateModel.class);

}
catch (IOException e) {

}

我不确定我现在做错了什么......是因为 AttributeModel 不是 POJO?还是我不能在这个实现中使用地图?如果是这样,我该如何解决这个问题?

4

2 回答 2

7

它需要有一个无参数的构造函数,以便 Jackson 可以实例化它。

于 2012-11-01T02:41:29.313 回答
0

例外:

com.fasterxml.jackson.databind.JsonMappingException:没有找到适合类型[简单类型,类 ImportDataModel$ImportTemplateModel] 的构造函数:无法从 JSON 对象实例化(需要添加/启用类型信息?)

表明这ImportTemplateModel是一个内部类。您的代码片段显示此类不是静态的。如果它不是静态的,则不能在其外部类之外实例化ImportDataModel。使其成为静态或独立类,它应该可以工作。

于 2012-11-01T01:51:10.747 回答