2012-01-16 3 views
1

나는 간단한 클래스 다음과 같은 코드를 작성하는 방법 다음 읽기가 :잭슨 벡터 직렬화 예외

ObjectMapper mapper = new ObjectMapper(); 
    try{ 
     DataStore testOut = new DataStore(); 
     DataStore.Checklist ch1 = testOut.addChecklist(); 
     ch1.SetTitle("Checklist1"); 

     String output = mapper.writeValueAsString(testOut); 
     JsonNode rootNode = mapper.readValue(output, JsonNode.class); 
     Map<String,Object> userData = mapper.readValue(output, Map.class); 
    } 


public class DataStore { 
public static class Checklist 
{ 
    public Checklist() 
    { 

    } 
    private String _title; 
    public String GetTitle() 
    { 
     return _title; 
    } 
    public void SetTitle(String title) 
    { 
     _title = title; 
    } 

} 
//Checklists 
private Vector<Checklist> _checklists = new Vector<Checklist>(); 
public Checklist addChecklist() 
{ 
    Checklist ch = new Checklist(); 
    ch.SetTitle("New Checklist"); 
    _checklists.add(ch); 
    return ch; 
} 
public Vector<Checklist> getChecklists() 
{ 
    return _checklists; 
} 
public void setChecklists(Vector<Checklist> checklists) 
{ 
    _checklists = checklists; 
} 
} 

라인 : 문자열 출력 = mapper.writeValueAsString (testOut); 은 나를 몇 시간 동안 당혹스럽게 만들었고 이것을 사용하여 버리려는 예외를 초래합니다. 힌트를 보내 주시면 감사하겠습니다.

여기

는 예외입니다 : 클래스 데이터 저장소 $ 체크리스트에 대한 찾을 수 없습니다 시리얼 라이저와 어떤 속성 (SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS을 사용하지 않도록 예외를 피하기 위해)) (참조 체인을 통해 BeanSerializer을 만들 발견되지 : 데이터 저장소를 [ "체크리스트"] - > java.util.Vector [0])

+0

Jackson의 지형지 물을 비활성화하여 예외를 제거 할 수 있었지만 아직 데이터를 쓰지 않았습니다. – wandercoder

+0

오류 메시지가 분명하지 않습니까? Jackson은 표준 Bean 내성 메커니즘을 사용하여 특성을 찾을 수 없습니다. 이것이 바로 당신이 해결해야 할 것입니다. – StaxMan

답변

0

여러 가지 방법이 있지만 내가 잘못하고있는 것부터 시작하겠습니다. getter 및 setter 메소드의 이름이 잘못되었습니다. Java에서는 "camel-case"를 사용하므로 " getTitle ". 이 때문에 속성을 찾을 수 없습니다. 이름을 바꾸는 방법 외에

자바 스타일의 이름을 사용하는 대안이 있습니다 : 당신이 랩퍼 오브젝트를 원하지 않는 경우 해당 속성이

  • 을 인식 있도록, GetTitle()에 대한 주석 JsonProperty("title")을 사용할 수 있습니다

    • , GetTitle()@JsonValue을 추가 할 수 있습니다.이 경우 전체 개체에 사용되는 값은 해당 메서드의 반환 값이됩니다.
  • -2

    답변은 다음과 같을 것입니다. Json에서는 그렇게 할 수 없습니다. Gson 튜토리얼에서 주석을 보았습니다. 일부 직렬화가 작동하지 않는다는 내용입니다. XStream을 다운로드하고 XML을 사용하여 몇 분 안에 작업을하고 로터을 덜 건설하고 싶었습니다. 이 과정에서 많은 코드를 삭제할 수있었습니다.

    +1

    질문은 JSON과 Jackson에 관한 것입니다. 여기서 XML을 추천하는 것은 오토바이를 더 좋아하는 사람이 있기 때문에 수리 대신 오토바이를 구입할 사람을 부러 뜨린 자동차를 추천하는 것과 같습니다. – shapecatcher