request.getParameterMap 无法获取到参数的原因
问题描述:使用 request.getParameterMap 无法获取到 swagger 调用接口传递的参数,接口接收参数使用了 @RequestBody 接收的参数。
解决方案:
1.使用 @RequestParam("id") 接收参数,但是这个多用于只有 一到二个参数传递,不适用多个参数传递。
2.接口接收参数不使用 @RequestBody 注解接收。
问题出现的原因就是因为使用了 @RequestBody 。因为 @RequestBody 把接口参数转化成了 String 字符串,所以无法获取到参数。如果方法中传递的是 查询 db 类的对象的话 是可以获取到对象的。
获取请求参数demo:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); //获取 请求参数的 键值对 Map<String, String[]> requestParams= request.getParameterMap(); /** * 请求参数Map转换验证Map * * @param requestParams * 请求参数Map * @param charset * 是否要转utf8编码 * @return * @throws UnsupportedEncodingException */ public static Map<String, String> toVerifyMap(Map<String, String[]> requestParams, boolean charset) { Map<String, String> params = new HashMap<>(); for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } // 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化 if (charset) valueStr = getContentString(valueStr, INPUT_CHARSET); params.put(name, valueStr); } return params; }