• 记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自己去映射。
     
  • 相关阅读:
    毕设问题02-index.jsp跳转html问题
    毕设问题01-html中引入公共部分代码
    毕设开篇
    object和大括号自定义对象
    数组js
    function 方法的使用
    JavaScript01
    CSS属性
    听说不能改日期了
    获取时间
  • 原文地址:https://www.cnblogs.com/yzyBalance/p/13546552.html
Copyright © 2020-2023  润新知