具有动态方法参数类型的 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)
    )
);