# Vue Axios Post 请求后端request.getParameterMap()拿不到值

余生颓废 提交于 2020-08-19 19:54:52

Vue Axios Post 请求后端request.getParameterMap()拿不到值

后端Form表单提交ConteentType类型
  • application/x- www-form-urlencodedPost请求默认的请求体内容类型,也是form表单默认的类型。Servlet API规范中对该类型的请求内容提供了request.getParameter()方法来获取请求参数值。
当请求类型不是Form表单提交的类型时候可以用下面方法取参数
  • VueAxios post提交时候默认提交Json格式的,后端使用``````request.getParameter()拿不到相应的参数值,可以使用param = request.getReader().readLine();```这个方法拿到值,但是得到的是String 类型的参数,不好处理。就是如下图所示的问题。
    在这里插入图片描述

  • 还是处理一下Vue axios的提交方式,修改如下

export function requireData(url, params, type, item) {
  if (!url) return false
  switch (item) {
    case 'back':
      url = axios.defaults.baseM1URL + url
      break;
    case 'before':
      url = axios.defaults.baseM2URL + url
      break;
    default:
      url = axios.defaults.baseM2URL + url
  }
  if (type === 'get') {
    url = paramsToUrl(url, params)
    return new Promise((resolve, reject) => {
      axios.get(url, params).then(res => {
        resolve(res.data)
      }).catch(err => {
        reject(err)
      })
    })
  } else if (type == 'post') {
    return new Promise((resolve, reject) => {
      //默认的方式 
      // axios.post(url, params).then(res => {
      //   resolve(res.data)
      // }).catch(err => {
      //   reject(err)
      // })
        
      //改变后的方式  
      axios({
          url: url,
          method: 'POST',
          data: params,
          transformRequest: [function (data) {
            let ret = ''
            for (let it in data) {
              ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
            }
            return ret
          }]
        }).catch(err => {
          reject(err)
        })
    })
  }
}

现在提交的Post请求的ContentType和相关参数信息如下所示
在这里插入图片描述

后端写个获得通用参数的方法,美滋滋
/**
 * 处理HttpServletRequest拿到参数的Map
 */
public Map<String, String> getParamMap(HttpServletRequest request) {
    try {
        Map<String, String[]> parameterMap = request.getParameterMap();
        Map<String, String> map = new HashMap<>();
        if (parameterMap != null && parameterMap.size() > 0) {
            for (String key : parameterMap.keySet()) {
                String[] strings = parameterMap.get(key);
                String value = Arrays.asList(strings).get(0);
                map.put(key, String.valueOf(value));
            }
            return map;
        }
        System.out.println(parameterMap);
        return null;
    } catch (Exception e) {
        e.printStackTrace();
        return new HashMap<>();
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!