0

JSON Jackson 2.0を使用してデータモデルをファイルに書き込み、それをアプリケーションにロードし直しています。オブジェクトを文字列に正常に書き込むことはできますが、オブジェクトをオブジェクトにマーシャリングしようとすると、次のエラーメッセージが表示されます。

タイプ[simpletype、class ImportAttributeModel]に適したコンストラクターが見つかりません:[Source:user;で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

ジャクソンがインスタンス化できるように、引数のないコンストラクターが必要です。

于 2012-11-01T02:41:29.313 に答える
0

例外:

com.fasterxml.jackson.databind.JsonMappingException:タイプ[単純なタイプ、クラスImportDataModel $ ImportTemplateModel]に適したコンストラクターが見つかりません:JSONオブジェクトからインスタンス化できません(タイプ情報を追加/有効化する必要がありますか?)

ImportTemplateModelそれが内部クラスであることを示唆しています。コードスニペットは、このクラスが静的ではないことを示しています。静的でない場合、外部クラスの外部でインスタンス化することはできませんImportDataModel。静的またはスタンドアロンクラスにすると、機能するはずです。

于 2012-11-01T01:51:10.747 に答える