我有两种类型的TypeReferences,将在杰克逊的readValue方法中传递。
x= list((df['col1']-df['col2']).abs())
x.index(max(x))
在传递这两个引用中的任何一个时,如何使杰克逊readValue正常工作
由于我正在处理Http调用,因此我尝试发送自定义错误代码,并根据此代码更改在readValue方法中传递的Type-reference,该方法有效。但我正在寻找一种更有效的解决方案。
要使其正常工作,我可以使用以下方法:
1. Foo<AbstractResponse>
2. Foo <String>
或这个
mapper.readValue(jsonParser, new TypeReference<Foo<AbstractResponse>(){})
但这是预期的结果:
mapper.readValue(jsonParser, new TypeReference<Foo<String>(){})
答案 0 :(得分:1)
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;
}