programing

Enum에 기반한 잭슨 폴리모픽 역직렬화

minimums 2023. 2. 22. 21:40
반응형

Enum에 기반한 잭슨 폴리모픽 역직렬화

JacksonPolymorphicDeserialization을 사용하고 있습니다.이것은 '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 String type;

    public String getType() {
    return type;
    }

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

완벽하게 작동하며, 제 json은 'type' 값에 따라 예상 클래스로 바뀝니다.

그러나 'type' 속성을 String에서 Enum으로 이동하려고 합니다.이 변경은 새로운 코드입니다.

@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;
    }   
}

및 Enum:

public enum EventType {
    SPECIAL_EVENT_1,
    SPECIAL_EVENT_2,
    EVENT;
}

문제는 이 두 번째 접근법이 효과가 없다는 것입니다.왜 그런지 알아?Enum을 사용할 수 있습니까?

감사합니다!

고정!

잭슨 2.0과 연동됩니다!!

다음과 같은 enum을 사용하여 동작했습니다.

@JsonTypeInfo(  
    use = JsonTypeInfo.Id.NAME,  
    include = JsonTypeInfo.As.EXISTING_PROPERTY,  
    property = "type",
    visible = true
) 

언급URL : https://stackoverflow.com/questions/15945404/jackson-polymorphic-deserialization-based-on-enum

반응형