我正在尝试注册一个自定义通用值转换器,但它没有在绑定过程中被拾取。什么可能是错的。它基于本手册:https://docs.grails.org/latest/guide/theWebLayer.html#dataBinding 当我删除泛型时,一切正常。
我的通用枚举转换器:
abstract class EnumValueConverter < T extends Enum > implements ValueConverter {
@Override
boolean canConvert(Object value) {
value instanceof String
}
@Override
Object convert(Object value) {
try {
T.valueOf(value)
} catch (IllegalArgumentException illegalArgumentException) {
throw new IllegalArgumentException("needs to be one of ${T.values()*.name()} but is: $value")
}
}
@Override
Class<?> getTargetType() {
T
}
}
我的特定转换器:
class SomeEnumValueConverter extends EnumValueConverter<SomeEnum>{}
资源注册:
someEnumValueConverter SomeEnumValueConverter
答案 0 :(得分:0)
您不能在这样的上下文中使用泛型。如果您在该实例上创建SomeEnumValueConverter
的实例并调用getTargetType()
,则返回值将为Object
,而不是SomeEnum
,因此框架不知道该类型是什么类型转换器应该用于。
您可以覆盖SomeEnumValueConverter中的getTargetType()
方法并返回SomeEnum
。