Jackson 的constructParametricType 已被弃用,但constructParameterizedType 的工作方式不同

标签 jackson

这是我的代码片段,较新的“constructParameterizedType”不符合我的需求(除非我遗漏了一些东西,我认为我是这样)。我有一个名为 Result 的通用类,其中 T 是扩展我的“充气”基类的任何基本类。表示从 Salesforce REST API 返回的数据记录......所以这里是工作的代码示例:

Class c = Class.forName("sfshare.UserRecord" );
JavaType type = mapper.getTypeFactory().constructParametricType(Result.class, c);
Result<T> res = mapper.readValue(rspData, type);

但是,如果我使用较新的(未弃用的)“constructParameterizedType()”方法,则相同的代码将无法编译,因为它与constructParameterizedType 的参数不匹配。但是constructParameterizedType 还没有太多使用,也没有可以使用的示例......只有Javadoc - 这对我的用例没有意义。

最佳答案

如果您查看参数,特别是 Javadocs,您会注意到有一种新类型:第二个参数是参数的预期“目标”。
举一个意义的例子是,如果你想构造等价于:

ArrayList<String>

你想作为参数传递的是:
constructParameterizedType(ArrayList.class, List.class, String.class)

或者,可能是 Collection.class对于第二个论点。
将其视为您尝试为其提供参数的基础相关类型。

这种变化的根本原因有些复杂,与处理“附加”接口(interface)(如 Iterable<T>)有关。 :对于这些情况,有必要提供不同的类。

但在大多数最终用户用例中,您只需要传递与第一个和第二个参数相同的类。

关于Jackson 的constructParametricType 已被弃用,但constructParameterizedType 的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28502339/

相关文章:

json - 将两个不同的 JSON 字段名称映射到一个 POJO 属性

java - 忽略对象映射器级别的属性?

java - Jackson 在数组内反序列化数组

java - 什么是 JSON 提供程序以及有哪些不同类型的提供程序?

java - 如何创建有效的自定义 JSON 解析异常映射?

spring-mvc - Spring MVC 接收的 JSON 嵌套对象的 Spring Boot JACKSON 配置

java - JSON 序列化中的自定义对象标识

java - 如何使用注释反序列化时对 Json 进行排序?

java - 为 Google App Engine 配置 Jackson

java - 将字段传递给自定义反序列化器类 Jackson