继上次做微信小程序时解决拼接图片路径的问题之后,这次做音乐的接口又遇到了很类似上次的问题。感觉不是很难,但是一时想不到如何解决。由于他返回的数据类似于List<Map<String,Object>>这种格式的。我也发帖,咨询过大佬,大佬提供了这么一个思路,但是被我一眼就否了。
for (Map<String, Object> m : yourlist) { //遍历list
String url = (String)m.get(“murl”); //从map取出murl
url = “xxx地址” + url; //前面拼接地址
m.put(“murl”, url); //再放回map
}
乍一看可行,实际上类型根本就不对,List里面的泛型是个对象,写Map<String,Object>肯定会报错。很烦,于是我找了大佬来帮我解决这个问题,大佬写了几串代码之后,就让我无地自容了。
@ResponseBody
@RequestMapping(value = "/findMusicList",method = RequestMethod.GET)
public List<TMusic> findMusicList(){
List<TMusic> list=tUserService.findMusicList();
for (TMusic m:list){
String murl=m.getMurl();
m.setMurl(LocalNetUtils.natApp+murl);//LocalNetUtils.natApp是调用其他类的静态常量
}
return list;
}
看完之后唯一的感悟就是简单,就像他嘴里说的那么简单一样的简单,可是想想又觉得自己是真不可能写得出来。这里给的泛型就是我定义的对应的一个实体类,循环获取实体里面的murl,然后再重新set返回。
其他的方法
一、其实在这之前,我也咨询了我的朋友,他让我改实体类里面的get/set方法。于是我就在实体里面改了,这里其实和上面大佬给的方法可以说是一致的,不同之处在于作用域。我朋友给的方法是真的把实体类给改了,其弊端就是如果以后在其他场景需要调用它会有问题(代码就不做展示了,就是更改set里面的murl,this.setmurl=LocalNetUtils.natApp+murl)。
二、就是将未拼接好的数据直接传给前端,前端在循环的时候把需要的字符拼接上去循环,也同样可以实现效果(这是最不推荐的,人前端估计也不会乐意干这样的事)。