Für ein Projekt, an dem ich arbeite, haben wir viele Enums im Einsatz. Das Modellobjekt selbst besteht aus vielen kleinen Klassen; Dieses Modell wird dann über JAXB als XML in unsere DB serialisiert. Nun wollen wir in der Lage sein, unsere Enum-Werte mit der Rückkehr einer bestimmten Methode in der Enumeration zu serialisieren; das heißt gegeben:Bereitstellung von benutzerdefinierten Wert Serialisierung für Enums über JAXB
public enum Qualifier {
FOO("1E", "Foo type document"),
BAR("2", "Bar object");
private String code, description;
public Qualifier(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return this.code;
}
public String getDescription() {
return this.description;
}
}
etc. etc. Wenn derzeit in XML serialisiert, bekommen wir so etwas wie:
<qualifier>FOO</qualifier>
die ist, wie JAXB es abwickelt. Allerdings benötigen wir den Wert als Rückgabewert von getCode(), und eine ganze Reihe unserer enums folgen dieser Konvention (mit einer entsprechenden statischen Methode zum Nachschlagen über Code), so dass das obige XML-Fragment wie folgt aussieht:
<qualifier>1E</qualifier>
stattdessen. Wir können es mit @XmlEnum
und @XmlEnumValue
kommentieren, aber das ist zu langweilig - einige Enums haben bis zu 30 aufgezählte Werte, und die Bearbeitung von Hand ist nicht gut. Wir denken auch darüber nach, einen angepassten Serializer zu verwenden, aber ich möchte diesen Weg vorerst vermeiden (aber wenn das der richtige Weg ist, dann habe ich kein Problem damit).
Irgendwelche Ideen wie?
Hmm ... das wie die, die wir suchen aussieht. Mein Problem ist wirklich, dass es nicht allgemein genug ist (kann Generics nicht auf der Enum verwenden), aber das ist praktikabel.Es wird besser sein, einen Adapter pro Enum zu erstellen, anstatt die Enum-Werte selbst zu kommentieren. Vielen Dank! – jmibanez