2013-04-11 2 views
12
내가 JacksonPolymorphicDeserialization 함께 일하고 있어요

을 기반으로, 이것은 '유형'속성에 기반을 둔 적절한 클래스로 역 직렬화 내 코드입니다 : 그것은 완벽하게 작동하고잭슨 다형성 역 직렬화 열거

@JsonTypeInfo( 
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "type", 
    defaultImpl = Event.class, 
    visible = true) 
@JsonSubTypes({   
    @Type(value = SpecialEvent1.class, name = "SPECIAL_EVENT_1"), 
    @Type(value = SpecialEvent2.class, name = "SPECIAL_EVENT_2"), 
    }) 
public abstract class AbstractEvent { 

    private String type; 

    public String getType() { 
    return type; 
    } 

    public void setType(String type) { 
    this.type = type; 
    } 
} 

내 JSON은로 변신 'type'값에 따라 예상되는 클래스입니다.

@JsonTypeInfo( 
    use = JsonTypeInfo.Id.NAME, 
    include = JsonTypeInfo.As.PROPERTY, 
    property = "type", 
    defaultImpl = Event.class, 
    visible = true) 
@JsonSubTypes({   
    @Type(value = SpecialEvent1.class, name = "SPECIAL_EVENT_1"), 
    @Type(value = SpecialEvent2.class, name = "SPECIAL_EVENT_2"), 
    }) 
public abstract class AbstractEvent { 

    private EventType type; 

    public EventType getType() { 
    return type; 
    } 

    public void setType(EventType type) { 
    this.type = type; 
    } 
} 

하고 열거 :

그러나, 나는 열거하는 문자열에서 '유형'속성을 이동 고려하고,이 나의 새로운이 변화 코드

public enum EventType { 
    SPECIAL_EVENT_1, 
    SPECIAL_EVENT_2, 
    EVENT; 
} 

문제는이 두 번째 접근 방식이 작동하지 않는다는 것입니다 ... 어떤 생각입니까 ??? 여기에 Enum을 사용할 수 있습니까 ???

감사합니다.

답변

13

고정!

잭슨 2.0과 호환됩니다.

+1

이 경우 실제로 표시하지 않으면 작동하지 않을 것 같습니다. 확인할 수 있습니까? – Maxrunner

+0

'visible'이 작동하려면 'true'여야한다는 것을 확인할 수 있습니다. 내 경우 직렬화 중에 속성이 두 번 나타나는 것을 피하기 위해'include = JsonTypeInfo.As.EXISTING_PROPERTY'도 사용했습니다. –