Vue Axios Post 请求后端request.getParameterMap()拿不到值
后端Form表单提交ConteentType类型
application/x- www-form-urlencoded
是Post
请求默认的请求体内容类型,也是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<>();
}
}
来源:oschina
链接:https://my.oschina.net/u/4409991/blog/4487542