後台SpringMVC接收map型別引數

2021-08-29 05:15:33 字數 2749 閱讀 9213

背景:有時候我們可能需要發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...