具有动态方法参数类型的 Jackson TypeReference
Jackson TypeReference with dynamic method parameter type
我希望能够使用以下示例使用反射创建具有动态方法参数类型的 Jackson TypeReference method.getParameterTypes()1.
由于 TypeReference 只接受编译类型参数,但我读过所以你可以做一些技巧让它也适用于动态类型。
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
to get a JavaType
, which convertValue
也接受。
Type parameterType = method.getGenericParameterTypes()[0];
method.invoke(myBean, mapper.convertValue(
product,
mapper.getTypeFactory().constructType(parameterType)
)
);
我希望能够使用以下示例使用反射创建具有动态方法参数类型的 Jackson TypeReference method.getParameterTypes()1.
由于 TypeReference 只接受编译类型参数,但我读过所以你可以做一些技巧让它也适用于动态类型。
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
to get a JavaType
, which convertValue
也接受。
Type parameterType = method.getGenericParameterTypes()[0];
method.invoke(myBean, mapper.convertValue(
product,
mapper.getTypeFactory().constructType(parameterType)
)
);