我希望能够使用动态方法参数类型创建杰克逊类型引用,以下示例使用反射方法.getParameterTypes()1。
由于TypeReference只接受编译类型参数,但我在SO中阅读,你可以做一些技巧,让它也使用动态类型。
Method method = methodsMap.getOrDefault("createXXX".toLowerCase(), null);
if(method != null && myBean!= null){
Object retval = method.invoke(myBean, mapper.convertValue(product , new TypeReference<method.getParameterTypes()[0]>(){}));
}
其中method.getParameterTypes()[0]属于java util generic list的类型(类型擦除问题)
List<MyPojo>
你根本不应该使用getParameterTypes
。您应该使用getGenericParameterTypes
来获取Type
。然后你可以把Type
传递给TypeFactory
以获得JavaType
,convertValue
也接受。
Type parameterType = method.getGenericParameterTypes()[0];
method.invoke(myBean, mapper.convertValue(
product,
mapper.getTypeFactory().constructType(parameterType)
)
);