ich einen Konverter für Apache BeanUtils Bibliothek implementiert haben für String in eine ENUM Konstante Umwandlung:Convert String ENUM Apache BeanUtils mit
class EnumConverter implements Converter {
@Override
public <T> T convert(Class<T> tClass, Object o) {
String enumValName = (String) o;
Enum[] enumConstants = (Enum[]) tClass.getEnumConstants();
for (Enum enumConstant : enumConstants) {
if (enumConstant.name().equals(enumValName)) {
return (T) enumConstant;
}
}
throw new ConversionException(String.format("Failed to convert %s value to %s class", enumValName, tClass.toString()));
}
}
ich es auf folgende Weise verwenden:
// Register my converter
ConvertUtils.register(new EnumConverter(), Enum.class);
Map<String, String> propMap = new HashMap<String, String>();
// fill property map
BeanUtils.populate(myBean, propMap);
Unfortunatelly ein Setter in MyBean Instanz außer ConcreteEnumClass enum, statt java.lang.Enum, das ist, warum ich die folgende Ausnahme während BeanUtils.populate Methodenaufruf erhalten:
org.apache.commons.beanutils.ConversionException: Default conversion to ConcreteEnumClass failed.
at org.apache.commons.beanutils.converters.AbstractConverter.handleMissing(AbstractConverter.java:314)
at org.apache.commons.beanutils.converters.AbstractConverter.handleError(AbstractConverter.java:269)
at org.apache.commons.beanutils.converters.AbstractConverter.convert(AbstractConverter.java:177)
at org.apache.commons.beanutils.converters.ConverterFacade.convert(ConverterFacade.java:61)
at org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:491)
at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1000)
at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:821)
at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:431)
Wenn ich EnumConverter auf folgende Weise registrieren:
ConvertUtils.register(new EnumConverter(), ConcreteEnumClass.class);
Alles freigegegeben.
Da möchte ich meine EnumConverter im allgemeinen Fall verwenden, würde ich es vorziehen, es String in jedem Enum Klasse konvertiert werden.
Ist es möglich? Wie soll ich das machen?