2012-11-30 2 views
7

REST 서비스에서 범주 및 항목 트리를 가져옵니다. 카테고리에는 카테고리 및/또는 항목의 목록을 포함하는 "하위"속성이 있습니다. 유형은 "kind"필드에 지정됩니다.Jackson 2.1 다형성 직렬화 : pojo에서 형식 필드를 채우는 방법은 무엇입니까?

잭슨의 다형성 유형 처리는 훌륭하고 모든 작은 예상 작업을 제외하고는 예상대로 작동합니다. "종류"필드 자체는 채워지지 않습니다. 이 데이터를 pojos에 가져 오는 간단한 방법이 있습니까? 나는 커스텀 디시리얼라이저를 작성하지 않기를 희망한다.

다음은 Category 및 Item의 기본 클래스입니다. 두 개의 하위 클래스는 여러 개의 스칼라 필드를 추가하며별로 흥미롭지 않습니다.

@JsonIgnoreProperties(ignoreUnknown=true) 
@JsonTypeInfo( 
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "kind", 
    defaultImpl = EntityBase.Impl.class 
    ) 
@JsonSubTypes({ 
    @Type(value = Item.class, name = "Item"), 
    @Type(value = Category.class, name = "Category") 
    }) 
public abstract class EntityBase { 
    String title; 
    String kind; 

    public void setTitle(String title) { this.title = title; } 
    public String getTitle() { return title; } 

    public void setKind(String kind) { this.kind = kind; } 
    public String getKind() { return kind; } 

    public static class Impl extends EntityBase {} 
} 

나는이 같은 ObjectMapper 뭔가로 직렬화를하고 있어요 :

ObjectMapper mapper = new ObjectMapper(); 
Category category = mapper.readValue(inputStream, Category.class); 

나는 심지어 태그를받을 자격이되지 않도록 관련이없는 생각,하지만 단지의 경우,이에 Android 앱.

답변

10

평상시처럼 나는이 질문을 게시하기 직전에 몇 분 더 시간을 들여 분명히 아무것도 놓치지 않았는지 확인했습니다.

나는 그것을 명백하게 부르지 않겠지 만 대답은 a resolved jira ticket입니다. 티켓은 http://jackson-users.ning.com/의 게시물 아래에 댓글로 연결되었지만 게시물에 대한 링크는 잃어 버렸습니다.

이 작업을 수행하는 JsonTypeInfo 주석에 "visible"속성이 있습니다.

@JsonTypeInfo( 
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "kind", 
    visible = true,     // <----- add this 
    defaultImpl = EntityBase.Impl.class 
    ) 
public abstract class EntityBase { 
    ... 
} 

이 내용은 javadocs에 설명되어 있습니다. 나는 오래된 1.5 문서 (그리고 jackson.codehaus.org와 fasterxml.com 사이의 혼란스러운 이분법은 도움이되지 않는다)에 대한 우수한 SEO 덕분에 그것을 놓쳤다. 그러나 지금 나는 나의 수업을 배웠고 나는 문서를보고있다. 여기 : http://wiki.fasterxml.com/JacksonJavaDocs.

+1

뛰어난 수사 작업! – StaxMan

+0

몇 시간 전이 정확한 문제에 직면해라 - 당신은 내 머리카락이 남아있는 것을 구했습니다! 힘줄! – tbm

관련 문제