我有两种类型的 TypeReferences,它们将在 Jackson 的 readValue 方法中传递。
1. Foo<AbstractResponse>
2. Foo <String>
当这两个引用中的任何一个被传递时,如何使 jackson readValue 工作
由于我正在处理 Http 调用,因此我尝试发送自定义错误代码并基于它更改在 readValue 方法中传递的类型引用,这有效。但我正在寻找比这更有效的解决方案。
为了使这项工作正常进行,我可以使用这个:
mapper.readValue(jsonParser, new TypeReference<Foo<AbstractResponse>(){})
或者这个
mapper.readValue(jsonParser, new TypeReference<Foo<String>(){})
但这正是我们所期望的:
mapper.readValue(jsonParser, new new TypeReference<Foo<T>>() {})
最佳答案
ObjectMapper
的方法 readValue 是一个通用方法。泛型在编译时解析,因此您无法动态执行此操作。
假设您有以下方法:
Foo<T> <T> bar(parser, TypeReference<Foo<T>> reference) {
...
return mapper.readValue(jsonParser, reference);
}
你不能这样调用它:
TypeReference<Foo<T>> reference;
switch (value) {
case "X":
reference = new TypeReference<Foo<AbstractResponse>(){};
break;
case "Y":
reference = new TypeReference<Foo<String>(){};
break;
}
bar(parser, reference);
但您可以执行以下操作:
switch (value) {
case "X":
bar(parser, new TypeReference<Foo<AbstractResponse>(){});
break;
case "Y":
bar(parser, new TypeReference<Foo<String>(){});
break;
}
关于java - 如何动态更改 jackson 的读值中传递的类型引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088622/