我正在尝试为 Spring 创建一个通用转换器,它将允许传入的枚举值混合大小写并在映射到枚举之前转换为上。
当为特定枚举类型定义转换器时,该转换适用于我们使用的任何特定枚举类型。然而,当我把它写成一个通用的 Spring 从不调用代码时。
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
// Doesn't work, Spring doesn't appear to allow Converters with type parameters :-(
@Component
public class StringToEnumConverter <T extends Enum> implements Converter<String, T> {
@Override
public T convert(String string) {
Type type = ((ParameterizedType)StringToEnumConverter.class.getGenericSuperclass()).getActualTypeArguments()[0];
return (T) Enum.valueOf((Class<T>)type, string.trim().toUpperCase());
}
}
是代码不正确还是 Spring 不知道如何在运行时匹配类型?我希望T extends Enum
Spring 有足够的信息通过这里发送所有 Enum 子类。