当前位置: 首页 > news >正文

【小bug】使用 RestTemplate 工具从 JSON 数据反序列化为 Java 对象时报类型转换异常

        起因:今天编写一个请求时需要通过RestTemplate调用外部接口,获取一些信息,但是在获取了外部接口响应内容后,使用强制转换发现报了类型转换异常。之前也遇到过,但是没记录下来,今天又查了一遍……干脆记录一下。

        控制类方法报错位置

        报错信息

1. 原因

        在使用 RestTemplate 从 JSON 数据反序列化时,默认会将 JSON 数据转换为 LinkedHashMap。而在我的代码 result.get("obj") 的实际数据类型就是LinkedHashMap。

2. 解决

        方案一:使用ObjectMapper

        ObjectMapper是Jackson提供的一个类,用于将json数据转换为java对象。

    ObjectMapper objectMapper = new ObjectMapper();//                                            需要转换的内容     目标类Resfood resfood = objectMapper.convertValue(result.get("obj"), Resfood.class);

        方案二:使用ResponseEntity

        ResponseEntity 是 Spring 对 HTTP 响应的封装,包括状态码、响应头和响应体。RestTemplate 会向指定的 url 发送一个 GET 请求,服务器返回的响应会被封装到 ResponseEntity 对象中,使用ParameterizedTypeReference<T> 可以确保响应体会被正确地反序列化为 T 类型。

//直接接收响应体部分的内容并将其转换为 T 对象。
ResponseEntity<T> response = restTemplate.getForEntity(url, T.class);
//获取 HTTP 响应体的内容,并将其转换为 Object 对象
Object obj = response.getBody();

        

        转换成功~


http://www.mrgr.cn/news/33678.html

相关文章:

  • python编程,把所有子目录和文件输出到文本文件
  • C++面向对象:多态!
  • ComfyUI生成头像
  • spring揭秘22-springmvc01-概述
  • 基于51单片机的手环设计仿真
  • 数据结构与算法——Java实现 10.习题——删除有序链表重复节点
  • Java编程规范
  • Python知识点:如何使用Python进行智能合约开发(Solidity、Web3.py)
  • 跟着chatgpt一起学|多模态入门
  • Junit4测试报错:java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
  • 数字阅读步履蹒跚,阅文集团定位尴尬
  • 结合HashMap与Java 8的Function和Optional消除ifelse判断
  • idea2021git从dev分支合并到主分支master
  • Vue的指令v-model的原理
  • 反序列化- Jackson...
  • ComfyUI三个超实用插件,一定不要错过!
  • JavaEE: 创造无限连接——网络编程中的套接字
  • Python中的null是什么?
  • 梧桐数据库(WuTongDB):向量化查询优化器的技术细节介绍
  • 一行代码实现快速排序