zoukankan      html  css  js  c++  java
  • 记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自己去映射。
     
  • 相关阅读:
    notepad++ remove duplicate line
    notepad++ $ ^
    中文名: 交通事故责任认定, 英文名称: Traffic accident responsibility identification
    java 反射 获取Class对象的三种方式
    [转]java中byte转换int时为何与0xff进行与运算
    java中byte取值范围为什么是 -128到127
    bytes2HexString
    DBCS 从256开始
    android开发之使用拼音搜索汉字
    电脑故障,路由器及网络
  • 原文地址:https://www.cnblogs.com/yzyBalance/p/13546552.html
Copyright © 2011-2022 走看看