我正在尝试注册一个自定义泛型值转换器,但在绑定过程中它没有被提取。哪里可能是错的。它基于以下手册: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>{}在resources.groovy中注册:
someEnumValueConverter SomeEnumValueConverter发布于 2018-03-27 03:42:46
你不能在这样的上下文中使用泛型。如果您创建一个SomeEnumValueConverter实例并在该实例上调用getTargetType(),则返回值将是Object,而不是SomeEnum,因此框架不知道转换器应该用于什么类型。
您可以覆盖SomeEnumValueConverter中的getTargetType()方法并返回SomeEnum。
https://stackoverflow.com/questions/49384539
复制相似问题