首页 > Java > java教程 > 正文

如何使用类型擦除反序列化 Jackson 中的嵌套通用对象?

DDD
发布: 2024-10-28 16:15:43
原创
752 人浏览过

How to Deserialize Nested Generic Objects in Jackson with Type Erasure?

Jackson 和泛型类型参考

当尝试使用 Jackson 的 JSON 库和泛型方法时,开发人员可能会遇到嵌套自定义对象的问题作为 LinkedHashMap 而不是其实际类返回。这个问题的出现是由于 Java 的类型擦除,它在编译期间删除了类型信息。

在提供的代码中,测试器方法旨在将 JSON 请求解析为具有泛型类型 T 的 MyRequest 对象。但是,没有指定T 的实际类,Jackson 默认将其视为 T 扩展 Object 并将 JSON 对象绑定到映射。

要解决此问题,测试器方法在反序列化 JSON 请求时应该能够访问实际类。这可以通过将其指定为 Class 参数来实现。以下代码演示了如何执行此操作:

<code class="java">public MyRequest<T> tester(Class<T> clazz) {
    TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>() {};
    MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
    return requestWrapper.getRequest();
}</code>
登录后复制

此外,为了确保在反序列化期间使用实际的类,请使用 TypeFactory 构造 JavaType,如下所示:

<code class="java">JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, clazz);</code>
登录后复制

与在此修改中,Jackson 会将 JSON 请求反序列化为包含指定类实例的 List,从而允许 getMyObject() 方法返回具有适当类型的对象。

以上是如何使用类型擦除反序列化 Jackson 中的嵌套通用对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!