java - 具有动态方法参数类型的 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>
解决方案
你根本不应该使用getParameterTypes
。您应该使用getGenericParameterTypes
, 来获得 a Type
。然后,您可以将其传递Type
给 aTypeFactory
以获得 a JavaType
,它convertValue
也接受。
Type parameterType = method.getGenericParameterTypes()[0];
method.invoke(myBean, mapper.convertValue(
product,
mapper.getTypeFactory().constructType(parameterType)
)
);
推荐阅读
- javascript - 嵌入 YouTube 视频的海报帧大于视频
- python - 熊猫从满足某些标准的最后一行填充?
- python - 用另一个字典的值替换字典的键以创建新字典
- c# - 在c#中将多个json字符串转换为数据集
- scala - 这是什么scala语法
- google-apps-script - 如何复制值并将它们粘贴到另一张纸上的下一个可用行中?
- scala - Scala中基于列表中的固定元素的动态大小写匹配
- git - git merge into master 删除我想保留的文件
- visual-studio-code - 如何手动更改文件夹在 Visual Studio Code Explorer 中的列出顺序?
- java - 生成列表而不是列表