request.getParameterMap无法获取到参数的原因
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;
}。