大家都知道,spring mvc请求,如果是走http请求,那么参数会默认转换成键值对格式,或者是json字符串形式的,
那么我们要接收对象怎么办呢?
今天就遇到一个场景,我需要一个list结构的参数,list里面又是map,那我们该怎么传参呢?
我们不能再浏览器上直接拼接参数发请求了,例如:
这样的格式是不被允许的,请求会报错。
那么我们转换思路,既然是json格式的参数,那我们就发json吧
恩,这样就OK了
那我们的代码怎么写呢,这里写个测试用例
@Test public void queryLiveCourseInfoTest(){ JSONArray jsonArray = new JSONArray(); JSONObject json1 = new JSONObject(); json1.put("dn","139****8068"); json1.put("bossCode","113118"); jsonArray.add(json1); JSONObject json2 = new JSONObject(); json2.put("dn","138****7807"); json2.put("bossCode","113117"); jsonArray.add(json2); String arr = jsonArray.toJSONString(); System.out.println("请求参数:"+arr); String url = nativUrl+"live/queryLiveCourseInfo"; try { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); headers.setContentType(type); HttpEntity<String> entity = new HttpEntity<String>(arr,headers); String res = restTemplate.postForObject(url, entity, String.class); log.info("结果:"+res); } catch (RestClientException e) { log.error("请求异常" + e.getMessage()); } } |
请求接口,参数要加@RequestBody
@RequestMapping("/queryLiveCourseInfo") @ResponseBody public ResultMsg queryLiveCourseInfo(@RequestBody List<Map<String, String>> paramList){ return liveService.queryLiveCourseInfo(paramList); } |
OK,完美解决!
如有理解不对的地方,欢迎小伙伴指正!