首页 > 解决方案 > 具有动态方法参数类型的 Jackson TypeReference

问题描述

我希望能够使用下面的示例使用反射 method.getParameterTypes() 1创建具有动态方法参数类型的 Jackson TypeReference 。

由于 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>

标签: javareflectionjackson

解决方案


你根本不应该使用getParameterTypes。您应该使用getGenericParameterTypes, 来获得 a Type。然后,您可以将其传递Type给 aTypeFactory以获得 a JavaType,它convertValue也接受。

Type parameterType = method.getGenericParameterTypes()[0];
method.invoke(myBean, mapper.convertValue(
        product, 
        mapper.getTypeFactory().constructType(parameterType)
    )
);

推荐阅读