2012-11-01 3 views
0

JSON Jackson 2.0을 사용하여 데이터 모델을 파일에 쓰고 응용 프로그램에 다시로드합니다. 객체에 문자열을 성공적으로 쓸 수는 있지만 객체로 다시 마샬링하려고하면 다음 오류 메시지가 표시됩니다.JSON을 사용하여 문자열 마샬링

[단순형, 클래스 ImportAttributeModel]에 적합한 생성자가 없습니다. JSON에서 인스턴스화 할 수 없습니다. 개체 (형식 정보를 추가/사용 가능하게해야합니까?) at [Source : user; 행 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가 아니기 때문에입니까? 또는이 구현을 위해지도를 사용할 수없는 이유는 무엇입니까? 그렇다면이 문제를 어떻게 해결할 수 있습니까?

답변

7

잭슨이 인스턴스화 할 수 있도록 인수가없는 생성자가 필요합니다.

+0

예, 'AttributeModel' 클래스에 대한 빈 생성자를 배치 한 후 이제 작동합니다. 감사. – Foo

0

예외 :

com.fasterxml.jackson.databind.JsonMappingException : 유형을 찾을 수 없습니다 적합 생성자 [간단한 유형, 클래스 ImportDataModel은 $ ImportTemplateModel] : JSON 개체에서 인스턴스화 할 수 없습니다 (유형을 활성화/추가해야 정보?)

ImportTemplateModel이 내부 클래스임을 나타냅니다. 코드 스 니펫은이 클래스가 정적이 아니라는 것을 보여줍니다. 정적이지 않은 경우 외부 클래스 ImportDataModel 외부에서 인스턴스화 할 수 없습니다. 정적 또는 독립 실행 형 클래스로 만들어야 작동 할 수 있습니다.

+0

'ImportTemplateModel'이 정적이어야한다는 것이 맞습니다. 그러나 오류가 여전히 발생합니다 ... OP 전체 오류 메시지로 업데이트됩니다. modelList를 처리하는 데 문제가 있다고 생각합니다. – Foo

관련 문제