jackson json字符串转对象,支持泛型

#先上代码

1/** 2 * 解析泛型类型 3 * @param type 4 * @return 5 */ 6public static List<Class<?>> parseGenericType(Type type){ 7 List<Class<?>> rootList = new ArrayList<Class<?>>(); 8 if(type instanceof ParameterizedType){ 9 ParameterizedType pType = (ParameterizedType)type; 10 rootList.add((Class<?>)pType.getRawType()); 11 for(Type at : pType.getActualTypeArguments()){ 12 List<Class<?>> childList = parseGenericType(at); 13 rootList.addAll(childList); 14 } 15 }else{ 16 rootList.add((Class<?>)type); 17 } 18 return rootList; 19} 20 21public static JavaType parseJavaType(ObjectMapper jsonMapper, Type genericParameterType){ 22 List<Class<?>> list = parseGenericType(genericParameterType); 23 if(list==null || list.size()==1){ 24 return jsonMapper.getTypeFactory().constructType(genericParameterType); 25 } 26 Class<?>[] classes = list.toArray(new Class[list.size()]); 27 Class<?>[] paramClasses = new Class[classes.length-1]; 28 System.arraycopy(classes,1,paramClasses,0,paramClasses.length); 29 JavaType javaType = jsonMapper.getTypeFactory().constructParametrizedType(classes[0],classes[0],paramClasses); 30 return javaType; 31}

#使用例子

1JavaType javaType = parseJavaType(objectMapper,method.getGenericReturnType()); 2MyBean bean = objectMapper.readValue(jsonStr, javaType);

原文地址

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java 泛型详解

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java泛型详解、Java中的泛型方法、java泛型详解1\.概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟

java泛型

一、实现机制java泛型实现方法为类型擦除,基于这种方法实现的泛型称为伪泛型。java泛型只在源代码中存在,在编译后的文件中替换为原生类型,并插入强制转换。(真正的泛型是应该存在于源码、编译后文件、运行期)二、擦除实例源码:List<StringtestListnewArrayList<String();

Gson通过借助TypeToken获取泛型参数的类型的方法

最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下。由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型)。但是有的时候