- 浏览: 2611590 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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" 的引用必须以 ';' 分隔符结尾
我有这样两个类
我们注意到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 1133public static void main(String[ ... -
解决tomcat中反序列化找不到class
2017-05-19 09:59 2180tomcat反序列化的过程中一直报ClassNotFoundE ... -
java的sun.jnu.encoding有什么用
2017-02-10 15:45 5529目前看到的影响有两个:影响类名的读取和Main方法参数的读取。 ... -
java的double乘法精度问题
2016-12-22 09:31 5603项目中实际的代码,我们实际的金额单位是元,精确到分,另外一个系 ... -
Calendar.getInstance()的坑
2016-12-06 16:50 6003Calendar.getInstance()看起来应该是个单例 ... -
针对jquery的when方法做的应变
2016-10-13 17:09 1111需求:a,b两个任务都处理(不管a,b是成功还是失败)后,执行 ... -
http的501错误
2016-10-09 15:37 8738普通的url请求是get put之类的,如果是乱七八糟的,比如 ... -
java对象初始化的顺序
2016-10-08 17:18 1037public class Son extends F ... -
java序列化框架性能比较
2016-05-24 09:22 32931. Kryo 2. FST 3. java 原生序列化 ... -
java 关闭main方法中的定时器线程(2)
2016-05-20 15:49 1820import java.util.concurrent ... -
java 关闭main方法中的定时器线程
2016-05-20 15:29 1232public class TestTreadClose { ... -
java用cyclicBarrier来实现Phaser的分段功能
2015-01-26 10:22 1602cyclicBarrier是有自动重置功能的,我们可以用这个功 ... -
Java的Integer是由缓存决定的,我们可以改变缓存来改变Integer
2015-01-25 16:00 1671import java.lang.reflect.Fi ... -
BigDecimal做四舍五入的坑
2015-01-12 10:23 4195BigDecimal decimal = new BigD ... -
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
2015-01-03 11:27 36339在hibernate启动的时候报了个错: 对实体 " ... -
mvel表达式遇到的坑
2014-12-31 18:02 5233简单的说是:mvel中int和一个double做乘法,是可能出 ... -
Java 泛型系统的不协变问题和类型推断
2014-11-11 21:16 1261原文:http://jerrypeng.me/2013/02/ ... -
spring启动的时候尝试多线程发生的死锁
2014-09-12 11:12 3954具体的死锁线程dump: Found one Java-l ... -
multimap的get方法犯的误区
2014-07-28 12:02 1147原文:http://java-performance.info ... -
java方法的syntethic类型
2014-04-15 19:16 1189我们一般说java的方法有public private,但其实 ...
相关推荐
它的使用简单,支持复杂的类型转换,包括泛型、枚举、自定义序列化和反序列化策略。Gson的优势在于其灵活性和强大的类型处理能力,使得它在处理JSON数据时非常便捷。 2. Jackson(FasterXML Jackson): Jackson是...
Java的Jackson库是一个广泛使用的库,它主要用于处理JSON数据,包括对象的序列化和反序列化。Jackson库的核心是`ObjectMapper`类,它提供了一种简单的方式来将Java对象转换成JSON格式,反之亦然。在给定的例子中,...
在Java开发中,序列化和反序列化是数据转换的重要环节,主要用于将对象转换为可存储或传输的数据格式,如JSON字符串,以及将这些数据还原为原来的对象。本压缩包包含fastJson、Gson和Jackson这三种流行JSON库的jar...
4. **类型绑定**:Jackson还支持多态性和泛型处理。使用`@JsonSubTypes`和`@JsonTypeInfo`可以处理不同类型的序列化和反序列化。 5. **模块和扩展**:Jackson有许多可选模块,如处理XML(jackson-dataformat-xml)...
Jackson还支持注解驱动的映射,允许开发者通过注解来控制序列化和反序列化的具体行为。 这三个库各有特点,Fastjson以其速度和简洁性脱颖而出,Gson则以其灵活性和对复杂类型的处理能力受到青睐,而Jackson则在功能...
3. **类型绑定与泛型**:Jackson 2.7改进了对泛型的支持,能够更准确地处理泛型类型,从而在反序列化时能正确恢复原始的类型信息。 4. **流式API**:`JsonParser`和`JsonGenerator`是Jackson的核心流式API,它们...
Jackson是Java领域中广泛使用的高性能JSON处理库,其2.9.2版本是该库的一个稳定版本,提供了高效且功能丰富的JSON序列化和反序列化功能。Jackson库由三个主要模块组成,这些模块在给定的压缩包文件中分别对应为: 1...
`ObjectMapper`类在这个模块中得到了进一步扩展,支持更多的高级特性,如类型转换、泛型处理、复杂类型的序列化和反序列化等。 使用Jackson库,开发者可以轻松地在Java对象和JSON字符串之间进行转换。例如,通过`...
Jackson库提供了JSON的解析(Deserialization)和序列化(Serialization)功能,使得Java对象与JSON字符串之间可以轻松地进行转换。 Jackson库的核心组件包括: 1. **Jackson ObjectMapper**:这是Jackson库中的...
它提供了高效、功能丰富的处理JSON的方式,包括序列化、反序列化以及数据绑定。在JSON的解析和生成方面,Jackson具有高性能、易用性以及灵活性等优点。在版本2.6中,Jackson库提供了一系列的JAR包,涵盖了不同的功能...
5. **处理泛型**:Jackson还支持泛型的序列化和反序列化,这对于处理如`List<T>`这样的类型特别有用。 6. **错误处理**:在处理JSON数据时,Jackson会抛出异常,如`JsonParseException`和`JsonMappingException`,...
2. **jackson-annotations**:这个模块提供了用于注解Java类和字段的一系列注解,以指示如何在序列化和反序列化过程中处理它们。例如,`@JsonProperty`用于指定哪个字段应映射到JSON属性,`@JsonIgnore`用于忽略某个...
除了基本的功能外,Jackson库还有许多高级特性,如类型转换、类型安全的泛型处理、处理日期和时间的模块、以及对XML和CSV的支持等。在实际开发中,根据具体需求,可以结合使用这些特性来优化JSON操作的效率和灵活性...
Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来解析、生成、序列化和反序列化JSON数据。标题中的"jackson-2.4.2相关jar包"指的是该版本的Jackson库的Java归档(JAR)文件,通常包含了...
5. **Jackson-module-afterburner**:这是一个性能优化模块,可以自动检测和处理常见的POJO(Plain Old Java Object)模式,提高序列化和反序列化的速度。 6. **Jackson-modules-java8**:对于Java 8的新特性,如...
3. **类型绑定(Type Binding)**:Jackson允许在序列化和反序列化过程中处理复杂的类型信息,如泛型、数组、集合和映射。这使得处理复杂的数据结构变得更加容易。 4. **注解支持(Autowired Annotations)**:Jackson...
2. **类型绑定**:Jackson的类型绑定机制在处理Guava类型时得到了增强,能够准确地识别和处理泛型信息,确保序列化和反序列化的精度。 3. **序列化和反序列化策略**:对于Guava的特殊类,如Range或Duration,...
Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来解析、生成、序列化和反序列化JSON数据。在Java项目中,如果需要与JSON进行交互,Jackson是一个非常理想的选择。标题提到的“jackson解析...
在处理复杂的JSON结构时,Jackson提供了许多高级特性,如类型绑定、自定义序列化器和反序列化器、处理日期和时间、支持泛型等。此外,Jackson还支持与其他数据格式的互操作,如XML、YAML等。通过扩展和配置,Jackson...
Jackson是Java领域中广泛使用的JSON处理库,它提供了一套完整的解决方案,包括序列化、反序列化以及数据绑定等功能。`jackson-all`是Jackson早期版本的一个打包集合,包含了所有核心模块,使得开发者可以一次性引入...