背景:有時候我們可能需要發ajax到後台,並且攜帶一些引數,如果引數數量少,我們可以直接在後台寫引數便可,如果前台提交的是表單,我們可以利用spring mvc提供的封裝引數的方法進行接收,但假如是另外一種情況,前台向後台傳送ajax請求並且攜帶很多引數,而後台並沒有對應的實體類進行接收又該如何處理,當然很多人可能會想到,根據請求中攜帶的引數,在後台定義乙個實體類,在根據mvc的封裝特性接收不就好了,這樣的做法是可以實現的,但是假如很多地方都是這樣的多引數的請求,難道都根據引數去建立對應的實體類嗎?這樣就會讓後台變得臃腫,冗餘,所以,後來思考是否可以使用map作為引數,傳遞到後台接收,這裡記下筆記,作為記錄。
剛剛我說的這種情況,可能在後台系統中會遇到的比較多,最常見的就是搜尋框表單,搜尋框內有多個搜尋條件,有時可能有一二十個,這種情況下,我們當然考慮使用map來解決。因為map的資料結構為key-value形式,所以我們可以遍歷搜尋框表單,將表單的name作為map的key,表單的value作為map的value.思路就到這裡,接下來貼**:
首先:遍歷表單組成map,在通過map轉化成json字串
//得到搜尋框資料
function getfromdata() );
//map轉為json的方法
let obj= object.create(null);
for (let[k,v] of datamap)
return obj;}
let obj=getfromdata();
$.ajax(,
success: function (json)
});//傳送ajax請求(第二種方式):1.必須填寫contenttype 2.傳送資料為json字串
$.ajax(
});
接下來是後台接收
//第一種ajax請求對應的後台介面
@responsebody
public void searchinfo(@requestparam mapmap)
}//第二種ajax請求後台對應的後台介面
@responsebody
public void searchinfo(@requestbody mapmap)
}
想必大家都知道@requestparam,可以獲取請求中所有的引數,包括我傳的jsondata,貼一下jsontomap,是一json轉換為map物件的工具類方法,因為在後台我們用map更方便,包括傳入mybatis時也可以直接傳map。
/**
* @auther: hejd
* @date: 2018/8/6 18:26
* @description:json轉map工具類
*/public class jsontomap
map.put(k.tostring(), list);
} else
}return map;
}else
} }
上面兩種方式的結果都是一樣的:
這裡記錄一下可能出現的問題,當我們接收前台的json資料並轉換為map,作為引數直接傳遞給mybatis時,即便xml中有做非null和非「」判斷,但還是會進入,導致出現 null(jsonnull)這種情況,出現這個的原因是因為,如下:
json裡的null與"null"。
處理物件:將json形式的字串轉換成jsonobject物件。
問題:如果在json串中存在value是「null」的情況下,下面的語句根據不同狀況會生成不同結果。
執行語句:
jsonobject jsob =jsonobject.fromobject(sjson);
情景1:sjson =」」
情景2:sjson =」」 注意:冒號後面有空格
執行結果:
在情景1的情況下,生成的jsob中,name的value是」「null」」
在情景2的情況下,生成的jsob中,name的value是null
總結:沒有空格的情況下,jsonobject會把」null」作為乙個字串來處理,也就會加上轉義符號。
有空格的情況下,jsonobject會把」null」轉換為jsonnull,也就是沒有引號。
既然知道是由空格引發的問題,所以我們的解決方案便是去掉空格,所以我們將修改後的js如下:
//得到搜尋框資料
function getfromdata() );
let obj= object.create(null);
for (let[k,v] of datamap)
return obj;
}
這樣問題得以解決,特此記錄
再次更新:這次是終結此類問題的!!!
spring框架中有個乙個工具類:webutils
裡面有乙個靜態方法: webutils.getparametersstartingwith(servletrequest request, string prefix);
原來別人早就考慮好了這種類似的情況,具體使用如下:
假如你有乙個這樣的表單
那麼提交不用像前面那樣子了,可以直接在後台:
public serverresponse list(servletrequest request)
}
鍵值不帶字首,是去掉字首的!!!!
SpringMVC之後臺接收Map型別引數
最近在做ssm時,使用spring mvc提供的封裝引數的方法進行接收時,遇到了乙個問題 前台向後台傳送ajax請求並且攜帶很多引數,而後台並沒有對應的實體類進行接收處理。如果根據引數去建立對應的實體類,這樣就會讓後台變得臃腫,冗餘,所以選擇用map接收 之後就不多舉例了,下面 中的json物件可以...
Spring MVC接收引數
1.和servletapi緊耦方法 使用原生 servletapi 使用原有的request物件進行獲取 只需要在方法內容宣告request形參即可,servlet在呼叫的時候會自動賦值。按照request的使用方式正常使用即可 springmvc引數優點 沒有引數,不賦值,正常執行 有引數,則給引...
後台接收引數
一 前台傳給的map引數中有乙個引數裡面是list集合,如何將它賦值給你新建立的物件中的對應屬性 集合中只有一列引數 新建乙個list接收該集合引數 list weeklist jsonarray.fromobject map.get students 通過get方法取出該集合 string bir...