背景:有时候我们可能需要发ajax到后台,并且携带一些参数,如果参数数量少,我们可以直接在后台写参数便可,如果前台提交的是表单,我们可以利用spring mvc提供的封装参数的方法进行接收,但假如是另外一种情况,前台向后台发送ajax请求并且携带很多参数,而后台并没有对应的实体类进行接收又该如何处理,当然很多人可能会想到,根据请求中携带的参数,在后台定义一个实体类,在根据mvc的封装特性接收不就好了,这样的做法是可以实现的,但是假如很多地方都是这样的多参数的请求,难道都根据参数去建立对应的实体类吗?这样就会让后台变得臃肿,冗余,所以,后来思考是否可以使用map作为参数,传递到后台接收,这里记下笔记,作为记录。
刚刚我说的这种情况,可能在后台系统中会遇到的比较多,最常见的就是搜索框表单,搜索框内有多个搜索条件,有时可能有一二十个,这种情况下,我们当然考虑使用map来解决。因为map的数据结构为key-value形式,所以我们可以遍历搜索框表单,将表单的name作为map的key,表单的value作为map的value.思路就到这里,接下来贴代码:
假如是上面类似这样的搜索框,我们点击搜索的时候,要根据用户选择或输入的条件去发送请求到后台获取相应的数据,这样就不可避免的会携带很多参数(可能有些搜索框更复杂)。
首先:遍历表单组成map,在通过map转化成json字符串
//得到搜索框数据
function getFromData() {
var dataMap = new Map();
$("#form_id input,select").each(function(){
var value= $(this).val(); //input 值
var name= $(this).attr('name');
dataMap.set(name,value);
});
//Map转为Json的方法
let obj= Object.create(null);
for (let[k,v] of dataMap) {
obj[k] = v;
}
return obj;
}
//发送ajax请求(第一种方式,推荐):1.contentType