Ich bin mit JacksonPolymorphicDeserialization arbeiten, das ist mein Code, der in die richtige Klasse deserialisiert mit Sitz in der ‚Typ‘ Eigenschaft:Jackson Polymorphe Deserialisierung basierend auf 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;
}
}
Es funktioniert perfekt und mein json verwandelt sich in die erwartete Klasse gemäß dem Typ-Wert.
Allerdings bin ich in Anbetracht der 'Typ' Eigenschaft von String in Enum zu bewegen, das ist mein neuer Code mit dieser Änderung:
@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;
}
}
und die Enum:
public enum EventType {
SPECIAL_EVENT_1,
SPECIAL_EVENT_2,
EVENT;
}
Die Problem ist, dass dieser zweite Ansatz nicht funktioniert ... irgendeine Idee warum ??? kann ich Enum hier benutzen ???
Danke!
Scheint, wenn Sie nicht das Sichtbare auf wahr in diesem Fall stellen, wird es nicht funktionieren .... können Sie bestätigen? – Maxrunner
Ich kann bestätigen, dass "sichtbar" muss "wahr" zu arbeiten. In meinem Fall habe ich auch 'include = JsonTypeInfo.As.EXISTING_PROPERTY' verwendet, um zu vermeiden, dass die Eigenschaft während der Serialisierung zweimal erscheint. –