• 记RestTemplate远程请求接口数据的一些注意事项


    问题场景:封装获取数据的方法时,想着每个数据接口都可以使用这个方法,不想重复写,于是就restTemplate.getForEntity(dataUrl, Object.class);采用object进行映射,发现取到的数据和直接浏览器访问url取到的数据不一致,甚至缺失。

    使用restTemplate.getForEntity(dataUrl, ClassXXX.class);获取远程数据时,参数二为返回数据的类型,如果接口返回类型为复杂数据类型即:map中嵌入list,或者list嵌入map,此时只能手动映射数据类型,

    就是自己创建该url返回的数据类型并封装为实体类,而java自动映射的Map或者List或者Object都不可以,会导致数据缺失或者结构与前端所需不一致,前端模板引擎遍历时报错等问题。
    举个例子:是map中嵌入list,Map<String,Object>中Object一旦映射的是List,自动映射的返回数据只会返回List的最后一条数据,原因是map.put()的键相同,导致覆盖。进而导致数据缺失。
    使用java自动映射的对象类型:Map.class  List.class  Object.class等,必须保证接口返回的数据类型是单一的某一种,(无论数量多少,只要种量为一即可),而不能是多种数据类型嵌套的复杂数据。一旦为复杂数据只能手动创建对应实体类。

    总的来说就是远程接口返回的数据类型是使用了泛型,或者返回数据所使用的实体类中数据类型不唯一,那么restTemplate接收的时候也只能使用对应实体类,而不能让java自己去映射。
     
  • 相关阅读:
    关于二进制包安装MySQL出现yum安装保护多库场景解决
    关于 Fatal NI connect error 12170 错误
    调优排故笔记1-利用等待事件及相关文件和视图-Oracle内核揭秘
    MySQL的四种隔离级别
    Oracle绑定变量
    接口加密测试
    接口测试用例设计
    学习总结——接口测试中抓包工具的使用
    学习总结——JMeter做WebService接口功能测试
    JMeter做http接口压力测试
  • 原文地址:https://www.cnblogs.com/yzyBalance/p/13546552.html
Copyright © 2020-2023  润新知