记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自己去映射。
 
posted @ 2020-08-22 18:15  myzy  阅读(835)  评论(0编辑  收藏  举报