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

TypeReference指定反序列化获取响应对象

文章目录

      • 前言
      • 正文
        • 示例
        • 导包错误导致问题
        • 全部代码:
        • 输出结果:
        • String转Map or 对象
      • 结尾

前言

在代码开发过程中,调用起三方的接口获取数据。但是总会有一些其他原因导致接口调用不成功,影响整体的接口效率。一般我们都是自己创建一个相同结构的对象去接收。如果接口地址存在差异,构造方法缺失,接收对象不对都会导致失败。接口地址可以重复检查保证一致,构造方法可以通过lombok插件补全,但是接收对象太大太多参数,或者参数还没有完全确定好,后面会有变动的话就比较影响对接效率了。

我们可以通过TypeReference指定反序列化的类型。通过调用接口,用String来接收响应数据,然后简单判断接口是否成功,这样就不需要去关心响应对象差异的问题了。

也就是StringList<Object>

也可以转 Map<String, Object>Object…直接将 TypeReference 指定的类型替换一下就好了。

正文

示例
String str = EntityUtils.toString(response.getEntity());
JSONObject json_test = JSONObject.parseObject(str);
JSONArray dateArray = json_test.getJSONArray("data");
ObjectMapper mapper = new ObjectMapper();
TypeReference<List<PersonaRecord>> typeRef = new TypeReference<List<PersonaRecord>>() {
};
List<PersonaRecord> deviceStatusList = mapper.readValue(dateArray.toJSONString(), typeRef);
导包错误导致问题

image-20240614114554466

导入的包是这个

image-20240614113118320

重新导入包:

image-20240620151804892

全部代码:

image-20240620151840682

package rcts.shine.push.infrastructure.utils;import com.alibaba.fastjson2.JSONArray;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import rcts.shine.push.infrastructure.db.entity.export.PersonaRecord;import java.util.ArrayList;
import java.util.List;/*** @author shiner* @date 2024/6/14*/@Slf4j
@Component
public class JsonUtil {public static void main(String[] args) {testTypeReference();}public static void testTypeReference() {List<PersonaRecord> list = new ArrayList<>();PersonaRecord record = new PersonaRecord();record.setUserId("231423432535");record.setUserPhone("13326653344");record.setIdentifyId("f44tjnd@hgoi0");list.add(record);list.add(record);list.add(record);String jsonString = JSONArray.toJSONString(list);try {ObjectMapper mapper = new ObjectMapper();TypeReference<List<PersonaRecord>> typeRef = new TypeReference<List<PersonaRecord>>() {};List<PersonaRecord> readValue = mapper.readValue(jsonString, typeRef);System.out.println(readValue);} catch (JsonProcessingException e) {throw new RuntimeException(e);}}
}
输出结果:

image-20240620151950360

String转Map or 对象
Map<String, Object> model1 = JSONObject.parseObject(JSONObject.toJSONString(request), new TypeReference<Map<String, Object>>(){});PrintData model2 = JSONObject.parseObject(JSONObject.toJSONString(request), new TypeReference<PrintData>(){});

结尾

tips:可以将TypeReference类型指定然后抽离出来,把testTypeReference()变成一个工具方法。重复使用而不是一直造轮子。

相关文章:

  • 进行性核上性麻痹饮食攻略:营养安全双护航
  • 内网渗透测试技巧与利用操作手册(SMB / MSSQL / LDAP)
  • 完全渲染后的页面内容
  • element-ui table实现默认选中,且不可修改
  • HNCTF部分总结复现
  • RTP MOS计算:语音质量的数字评估
  • 服务器部署普罗米修斯监控CentOS8
  • Opencv 相机标定相关API及原理介绍
  • LangGraph--搭建官方机器人聊天(带工具的)教程
  • Hibernate ORM框架开发指南
  • 自定义线程池 3.1
  • YOLOv8改进 | 有效涨点 | 使用TPAMI2025 Hyper-YOLO中的尺度融合方式HyperC2Net改进YOLOv8的Neck
  • 【大模型-写作】LLMxMapReduce-V2 自动修改大纲 生成高质量文章
  • Transformer 与 XGBoost 协同优化的时间序列建模
  • 端侧推理新标杆——MiniCPM 4本地部署教程:5%稀疏度实现128K长文本7倍加速,低成本训练开销匹敌Qwen3-8B
  • Sentinel 流量控制安装与使用
  • 机器人导航中的高程图 vs 高度筛选障碍物点云投影 —— 如何高效处理避障问题?
  • C 语言之 循环
  • 【Linux网络篇】:TCP协议全解析(一)——从数据段格式到可靠传输的三大基石
  • python实现层次分析法(AHP)权重设置与稳健性检验完整解决方案
  • 中国互联网协会官网/宁波seo营销平台
  • 网站开发一般多少钱/郑州网站优化seo
  • 乐山企业网站建设/盐城seo排名
  • 100 款软件app免费下载大全/广州seo推广服务
  • 网站美工做图/企业网站网页设计
  • 网站开发过程总结/推56论坛