springboot 中ResTemplate.getForObject请求如何处理带有list集合的map
  fBdBA9tXzLZY 2023年12月22日 27 0

在springboot项目中,我们经常会用@requestParam注解接收GET请求,在用resTemplate.getFobject(String url, Class responseType, Map<String, ?> uriVariables)方法请求其他服务时,会出现接收不到值的请求,需要我们在URL上做拼接处理,示例为:http://10.10.8.60:19051/wmsInnerCenter/warehouse/put/queryPlanPutGoodsByOrderType?name={name}。

name对应map中的key即所请求服务的方法参数名称。但是当map中传输list集合时我们需要做进一步处理,下面是我写的一个测试方法,希望能对迷途的同僚有所帮助。

**

  • @ClassName TestResTemplateController
  • Description
  • @Author ${白杨洋}
  • @Date 2020/5/12 10:25
  • @Version 1.0 **/ @RestController @RequestMapping(value = "/resTemplate") @Slf4j public class TestResTemplateController extends BaseController {
    @Autowired private RestTemplate restTemplate; @Autowired private WarehousePutProperties warehousePutProperties;
    /**
  • 测试resTemplate GET请求 */ @GetMapping(value = "/getForMap") public ResponseMessage getForMap(@RequestParam("putIds")List goodsSpecRealIds,@RequestParam("orderType") Integer orderType){
    Map<String,Object> map = new LinkedHashMap<>(); map.put("putIds",putIds); map.put("goodsSpecRealIds",goodsSpecRealIds); map.put("orderType",orderType); String res = getForMap(map); log.info("查询得到的结果为{}",res); return successMessage(); } private String getForMap(Map<String,Object> map){
    String url = warehousePutProperties.getQueryPlanPutGoodsByOrderType(); List objectList =new ArrayList<>(); Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry<String, Object> entry = iterator.next(); log.info("获取当前map的值为{}",entry); String key = entry.getKey(); log.info("获取到的map的key值为{}",key); Object o = entry.getValue(); if(o instanceof List){ List)o; if(VerifyUtil.verifyCollection(list)){ objectList.addAll(list); url=getRequestUrl(url,list,key); } }else{ if(VerifyUtil.verifyObject(o)){ objectList.add(o); url=getRequestUrl(url,Arrays.asList(o),key); } } } if(VerifyUtil.verifyCollection(objectList)){ Object[] array = objectList.toArray(); log.info("请求的路径为{}",url); String res = restTemplate.getForObject(url, String.class, array); log.info("根据入库单查询应入库信息的结果为{}",res); return res; } return null; } /**
  • 拼接请求url */ private String getRequestUrl(String url,List list,String key){ for (int i = 0; i < list.size(); i++) { if(url.contains("?")){ url+="&"+key+"="+"{"+i+"}"; }else{ url+="?"+key+"="+"{"+i+"}"; } } return url; } } 提醒大家一句,为了保证map迭代的顺序和map存值的顺序一样,我们需要用LinkedHashMap实例,这样就能保证包装的url参数和服务接收一致。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

fBdBA9tXzLZY