【Java】无法将java.util.LinkedHashMap强制转换为X
JsonJack:无法将java.util.LinkedHashMap强制转换为X
1. 概述
Jackson是一个广泛使用的Java库,它使可以方便地对JSON或XML进行序列化/反序列化。
有时,当尝试将JSON或XML反序列化为对象集合时,可能会遇到“ java.lang.ClassCastException:java.util.LinkedHashMap无法转换为X”。
2.问题分析
简单的来说,JSON反序列化时,未提供目标信息,它将使用目标类型:LinkedHashMap。接下来,我们来模拟这样的场景。
2.1 数据准备
首先先创建已经基础类:Person。
1 public class Person {
2 private String name; // 名称
3 private int age; // 年龄
4 // …… 这里省略了getter,setter等方法。
5 }
创建一个用于测试的API接口,http://localhost:8090/tsy/cip/test/getPersion 。返回的JSON数据如下:
1 [
2 {
3 "name": "张三",
4 "age": 22
5 },
6 {
7 "name": "李四",
8 "age": 22
9 }
10 ]
我们创建测试数据,调用接口。
1 @Test
2 public void testError(){
3 RestTemplate restTemplate = new RestTemplate();
4 // 提交表单
5 HttpHeaders headers = new HttpHeaders();
6 headers.setContentType(MediaType.APPLICATION_JSON);
7 headers.add("Content-Type","application/json;charset=UTF-8");
8 //将请求头部和参数合成一个请求
9 List<Person> result = restTemplate.getForObject("http://localhost:8090/tsy/cip/test/getPersion" , ArrayList.class);
10 System.out.println("result=>" + result);
11 System.out.println("[0]Name=>" + result.get(0).getName()); // 报错java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.tsyapp.crm.domain.Person
12 }
运行结果如下:
2.2 错误分析
已经声明了类型为List<Person>,但是为什么Jackson尝试将LinkedHashMap类型转换为Book类呢?此外,LinkedHashMap来自何处?
restTemplate.getForObject,传递的对象是ArrayList.class 。所以JSON可以将他们反序列化为数组,但它并不知道数组内的对象是什么类型。
- 当未提供目标信息时,它使用默认类型LinkedHashMap。
【Java】无法将java.util.LinkedHashMap强制转换为X的更多相关文章
- java.lang.ClassCastException:java.util.LinkedHashMap不能转换为com.testing.models.Account
ObjectMapper mapper=new ObjectMapper();POJO pojo = mapper.convertValue(singleObject, POJO.class);
- java.lang.ClassCastException:java.util.LinkedHashMap不能转换为com.testing.models.xxx
后台接收前台的json字符串 转pojo 问题(Object 对应定义的pojo) ObjectMapper mapper=new ObjectMapper(); Object object = ma ...
- java.util.LinkedHashMap cannot be cast to xxx 和 net.sf.ezmorph.bean.MorphDynaBean cannot be cast to xxx
java.util.LinkedHashMap cannot be cast to com.entity.Person 使用mybatis, resultMap映射的是实体类Person, 查询出来的 ...
- 2019-8-26 LinkedHashMap 转 List [java.util.LinkedHashMap cannot be cast to com.zq.dataservice.bean.Index]
java.util.LinkedHashMap cannot be cast to com.zq.dataservice.bean.Index 上述错误是在做一个趋势投资demo时遇到的. 说的是链式 ...
- java.util.HashSet, java.util.LinkedHashMap, java.util.IdentityHashMap 源码阅读 (JDK 1.8)
一.java.util.HashSet 1.1 HashSet集成结构 1.2 java.util.HashSet属性 private transient HashMap<E,Object> ...
- JDK1.8源码(九)——java.util.LinkedHashMap 类
前面我们介绍了 Map 集合的一种典型实现 HashMap ,关于 HashMap 的特性,我们再来复习一遍: ①.基于JDK1.8的HashMap是由数组+链表+红黑树组成,相对于早期版本的 JDK ...
- java.util.HashSet, java.util.LinkedHashMap, java.util.IdentityHashMap 源码阅读 (JDK 1.8.0_111)
一.java.util.HashSet 1.1 HashSet集成结构 1.2 java.util.HashSet属性 private transient HashMap<E,Object> ...
- java中,null值可以被强制转换为任何类型
java中,null值可以被强制转换为任何类型
- Java中父类强制转换为子类的可能
之前徒弟问了一个问题, 在Java中, 父类对象到底能不能转换成对应的子类对象? 到底能不能, 今天就来说说这个问题, 先看下面一段代码: package cn.com.hanbinit.test; ...
- java.util.LinkedHashMap cannot be cast to
Jackson转换泛型List出现错误java.util.LinkedHashMap cannot be cast to com.xxx ObjectMapper mapper = new Objec ...
随机推荐
- Rstudio 快捷键无法使用
今天突然发现我的R studio 很多快捷键不能使用,后面发现是因为Rstudio 的快捷键与MobaXterm的快捷键起冲突了,后面关掉MobaXterm后就恢复了,如果有类似的问题可以在自己电脑打 ...
- TensorFlow学习报告
TensorFlow简介 是一个基于计算图的深度学习库,具有更广泛的应用领域.良好的多语言支持.部署性能等优点,时现今最广泛使用的深度学习框架. 计算图Session Tensor 1 import ...
- C# 读取电脑CPU、主板、硬盘序列号等信息
ManagementObjectSearcher 解析不到头文件,需要手动 Add Referance 需要添加引用:System.Management,然后引入命名空间:using System.M ...
- 华为&思科设备默认的路由协议优先级
华为&思科设备默认的路由协议优先级 华为设备默认路由协议优先级 在华为的设备中,路由器分别定义了外部优先级和内部优先级. 外部优先级是指用户可以手工为各路由协议配置的优先级; 内部优先级不能被 ...
- nginx 同一个域名根据后缀不同访问不同的项目
server { listen 80; server_name bcgx.work; location / { index login.html login.htm index.php; root / ...
- HelloWorld (用记事本写,在dos窗口里运行)
编写HelloWorld (用记事本写,在dos窗口里运行) 首先在任何一个盘中创建一个文件夹 在文件夹里新建一个HelloWorld.java文件,注意后缀名是.java(将文件拓展名打开) 打开这 ...
- python函数传参是传值还是指针
python中,往函数传参传的是指针,并非传值. 代码说话 如果改变函数参数的值,我们来看看改变: 但是如果是传的列表这种可变数据类型呢 传列表并没有发送改变,仍然指向的是原来的地址. 这是因为传的数 ...
- 软件工程日报九——SQLite的安装与配置
安卓stuio的数据库连接需要SQLite,现在进行安装与配置 一进官网下载sqlite-dll-win32-x86.zip和sqlite-tools-win32-x86.zip 二.在下载目录进行解 ...
- 性能测试-top-实时显示系统中各个进程的资源占用状况, 也可以查看线程
1.top命令介绍 top命令是Linux系统中常用的性能分析工具,可以实时地查看系统的运行情况,比如内存.CPU.负载以及各个进程的资源占用情况 top界面主要分为两个部分,前5行展示的是系统的整体 ...
- 无需联网,一键永久激活所有Windows/Office
对于 Windows 激活工具,大家可能了解不多,熟悉的比如小马激活工具,因为激活工具从来都是病毒高发区,各种工具混在一起,一不小心,电脑就中招了. 今天介绍一款不一样的. R@1n ReBirth ...