zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    vue路由懒加载
    Git文档
    Redis启动多个实例,并以windows服务方式运行
    windwos service安装命令
    sqlserver随机查询
    Redis 主从配置
    Unity3D 学习资料
    MAC常用终端命令
    服务器证书安装配置指南(IIS7)
    sql Exists与in 的区别
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/13474270.html
Copyright © 2011-2022 走看看