- 浏览: 2570254 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (880)
- 每日总结 (26)
- java (37)
- lucene 2.4源码学习 (11)
- 庖丁分词的源码分析 (5)
- cindy源码阅读 (10)
- jetty (3)
- java基础 (49)
- hadoop (37)
- python (7)
- 那些蛋疼的事 (15)
- 测试 (5)
- spring (3)
- redis (4)
- git (4)
- 我的开源项目 (2)
- linux (15)
- mysql (8)
- bootsharp (1)
- idea (1)
- Disruptor源码分析 (11)
- 高并发 (22)
- jdk (4)
- 领域驱动 (1)
- 坑 (6)
- 表达式框架 (7)
- 游戏 (3)
- Guava (1)
- 缓存 (1)
- 数据库 (1)
- 游戏项目 (3)
- java8 (1)
最新评论
-
hsluoyz:
PyCasbin是一个用Python语言打造的轻量级开源访问控 ...
权限管理的一个简单后台 -
liuyachao111:
谢谢 问题解决了
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾 -
jnjeC:
多谢博主分享,在配置文件里的&也要改成& ...
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾 -
大维啊:
同志,你这不行啊!
java 的 AccessController.doPrivileged使用 -
lisha2009:
解决了我的问题,多谢博主分享!
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
jsckson序列化处理泛型
- 博客分类:
- java基础
我有这样两个类
我们注意到a类是有泛型的,内容是动态的,我们开始的想法是这样的,动态构建一个TypeReference就行了吗
但是实际上是不行的,TypeReference的类型是类型定义的时候就确定了的,和你传进去的没有关系的,永远是<A<T>>
那我们要怎么做呢,
一种做法是覆盖TypeReference的getType方法,把真实的type动态构造传进去,就是方法getReference2
另外一种做法是利用jackson提供的构造JavaType的方式,就是方法getReference3
当然有人说,我们其实只要写一个new TypeReference<A<B>>()就可以了,但是如果我们想动态的传入B类型的话,还是有必要的。
package com.vipshop.mapi.wallet.test; import java.util.List; public class A<R> { private List<R> list; public List<R> getList() { return list; } public void setList(List<R> list) { this.list = list; } } package com.vipshop.mapi.wallet.test; public class B { private String name = "test"; public String getName() { return name; } public void setName(String name) { this.name = name; } }
我们注意到a类是有泛型的,内容是动态的,我们开始的想法是这样的,动态构建一个TypeReference就行了吗
public static <T> TypeReference<A<T>> getReference(T clz) { return new TypeReference<A<T>>() {}; }
但是实际上是不行的,TypeReference的类型是类型定义的时候就确定了的,和你传进去的没有关系的,永远是<A<T>>
那我们要怎么做呢,
一种做法是覆盖TypeReference的getType方法,把真实的type动态构造传进去,就是方法getReference2
另外一种做法是利用jackson提供的构造JavaType的方式,就是方法getReference3
package com.vipshop.mapi.wallet.test; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; /** * Created by cloud.huang on 17/1/10. */ public class JacksonTest { private static final ObjectMapper objectMapper = new ObjectMapper(); public static void main(String[] args) throws Exception { List<B> list = new ArrayList<>(); list.add(new B()); A a = new A(); a.setList(list); String json = objectMapper.writeValueAsString(a); TypeReference typeReference = getReference2(B.class); // JavaType typeReference = getReference3(B.class); A a2 = objectMapper.readValue(json, typeReference); } public static TypeReference<A> getReference2(Type clz) { Type[] types = new Type[1]; types[0] = clz; final ParameterizedTypeImpl type = ParameterizedTypeImpl.make(A.class, types, A.class.getDeclaringClass()); return new TypeReference<A>() { @Override public Type getType() { return type; } }; } public static JavaType getReference3(Class clz) { JavaType type = objectMapper.getTypeFactory().constructParametrizedType(A.class, A.class, clz); return type; } }
当然有人说,我们其实只要写一个new TypeReference<A<B>>()就可以了,但是如果我们想动态的传入B类型的话,还是有必要的。
发表评论
-
获取字符长度的正确姿势
2017-05-23 16:09 1076public static void main(String[ ... -
解决tomcat中反序列化找不到class
2017-05-19 09:59 2089tomcat反序列化的过程中一直报ClassNotFoundE ... -
java的sun.jnu.encoding有什么用
2017-02-10 15:45 5383目前看到的影响有两个:影响类名的读取和Main方法参数的读取。 ... -
java的double乘法精度问题
2016-12-22 09:31 5521项目中实际的代码,我们实际的金额单位是元,精确到分,另外一个系 ... -
Calendar.getInstance()的坑
2016-12-06 16:50 5802Calendar.getInstance()看起来应该是个单例 ... -
针对jquery的when方法做的应变
2016-10-13 17:09 1067需求:a,b两个任务都处理(不管a,b是成功还是失败)后,执行 ... -
http的501错误
2016-10-09 15:37 8595普通的url请求是get put之类的,如果是乱七八糟的,比如 ... -
java对象初始化的顺序
2016-10-08 17:18 982public class Son extends F ... -
java序列化框架性能比较
2016-05-24 09:22 32151. Kryo 2. FST 3. java 原生序列化 ... -
java 关闭main方法中的定时器线程(2)
2016-05-20 15:49 1772import java.util.concurrent ... -
java 关闭main方法中的定时器线程
2016-05-20 15:29 1171public class TestTreadClose { ... -
java用cyclicBarrier来实现Phaser的分段功能
2015-01-26 10:22 1552cyclicBarrier是有自动重置功能的,我们可以用这个功 ... -
Java的Integer是由缓存决定的,我们可以改变缓存来改变Integer
2015-01-25 16:00 1609import java.lang.reflect.Fi ... -
BigDecimal做四舍五入的坑
2015-01-12 10:23 4098BigDecimal decimal = new BigD ... -
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
2015-01-03 11:27 36186在hibernate启动的时候报了个错: 对实体 " ... -
mvel表达式遇到的坑
2014-12-31 18:02 5141简单的说是:mvel中int和一个double做乘法,是可能出 ... -
Java 泛型系统的不协变问题和类型推断
2014-11-11 21:16 1201原文:http://jerrypeng.me/2013/02/ ... -
spring启动的时候尝试多线程发生的死锁
2014-09-12 11:12 3882具体的死锁线程dump: Found one Java-l ... -
multimap的get方法犯的误区
2014-07-28 12:02 1100原文:http://java-performance.info ... -
java方法的syntethic类型
2014-04-15 19:16 1092我们一般说java的方法有public private,但其实 ...
相关推荐
主要介绍了解析Java的Jackson库中对象的序列化与数据泛型绑定,Jackson通常被用来实现Java对象和JSON数据的相互转换功能,需要的朋友可以参考下
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...
nfs-rpc是一个集成了各种知名通信框架的高性能RPC框架,目前其最好的性能为在采用grizzly作为通信框架,采用pb作为序列化/反序列化时,tps为168k次/秒。 其支持的功能主要为: 1、透明的调用远端服务器提供的功能...