Dla projektu, nad którym pracuję, używamy wielu wyrażeń. Sam obiekt modelu składa się z wielu małych klas; model ten następnie serializujemy do naszego DB jako XML poprzez JAXB. Teraz chcemy móc serializować nasze wartości wyliczeniowe za pomocą zwrotu konkretnej metody w wyliczeniu; że podano:Udostępnianie serializacji wartości niestandardowych dla wyliczeń za pomocą 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;
}
}
itp itd. Obecnie, gdy szeregowane do XML, otrzymujemy coś takiego:
<qualifier>FOO</qualifier>
która jest jak JAXB obsługuje go. Jednak potrzebujemy wartości zwracanej przez getCode(), a cała masa naszych wyliczeń jest zgodna z tą konwencją (z odpowiednią statyczną metodą wyszukiwania za pomocą kodu), tak że powyższy fragment XML wygląda tak:
<qualifier>1E</qualifier>
zamiast tego. Możemy opisać to za pomocą @XmlEnum
i @XmlEnumValue
, ale to zbyt męczące - niektóre wyliczenia mają do 30 wyliczonych wartości, a ręczna edycja nie jest dobra. Zastanawiamy się również nad użyciem niestandardowego serializera, ale na razie nie chciałbym iść tą drogą (ale jeśli to jest droga, to nie mam z tym problemu).
Jakieś pomysły, jak?
Hmm ... to wygląda jak ten, którego szukamy. Moim problemem jest to, że nie jest on wystarczająco ogólny (nie można używać generycznych w enumie), ale jest to wykonalne.Lepiej będzie utworzyć jeden adapter na enum, niż samemu zanotować wartości wyliczeniowe. Dzięki! – jmibanez