pracuję z JacksonPolymorphicDeserialization, to jest mój kod, który deserializes do odpowiedniej klasy opartej na „typ” własności:Jackson polimorficzne Deserializacji podstawie 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 String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
To działa doskonale i moja json przemieniło się w oczekiwana klasa zgodnie z wartością "typu".
Jednak Zastanawiam przenieść 'typem' własność z String do Enum, to jest mój nowy kod z tą zmianą:
@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;
}
}
i ENUM:
public enum EventType {
SPECIAL_EVENT_1,
SPECIAL_EVENT_2,
EVENT;
}
Problem polega na tym, że to drugie podejście nie działa ... jakikolwiek pomysł, dlaczego? czy mogę użyć Enum tutaj?
Dzięki!
Wygląda na to, że jeśli nie poprawisz widoczności w tym przypadku, nie zadziała .... czy możesz potwierdzić? – Maxrunner
Mogę potwierdzić, że 'widzialny' musi być" prawdziwy ", aby działał. W moim przypadku użyłem również 'include = JsonTypeInfo.As.EXISTING_PROPERTY', aby uniknąć pojawiania się właściwości podczas serializacji. –