java - 如何动态更改 jackson 的读值中传递的类型引用?

标签 java generics jackson

我有两种类型的 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/

相关文章:

java - String ReplaceAll 方法不起作用

java - 如何在 Lucene 中从 hdfs 读取索引

java - 从文件中用java解析JSON

java - 如何覆盖 glassfish 中的 j_security_check?

java - Zcontext.destroy() 挂起而不是终止所有打开的套接字

从数组转换为 vector 时的java泛型问题

java - 从 TypeReference<E> 转换为 Class<E> 而无需强制转换 (Java)

c# - 如何交叉两个不同的 IEnumerable 集合

java - Jackson JSON 使用 JAVA BEAN 映射 JSON 键

java - 使用 Java 中的 Jackson 库解析非常复杂的 JSON 文件