-
問題:依賴SpringMVC自帶的機制解析多對象參數往往出現解析不了的問題,使用較為復雜。
-
解決思路:前端 JS 先把傳遞到后台的對象轉換為 JSON 字符串,后台直接使用字符串類型接收,再使用 stringify 方法將 JSON 字符串解析成對應的Java對象。
-
具體步驟
-
前端定義一個空對象
var obj = new Object();
-
將需要傳遞的參數存入定義的空對象中,傳遞的參數分為以下幾種情況
-
前端有多個簡單同類型的參數:將這些參數整合到 Array 中,通過 JSON.stringify 方法轉換成 JSON 字符串,存入到上面定義的空對象中。
//三個參數同屬String類型 var d1 = 'a'; var d2 = 'b'; var d3 = 'c'; var simple_data = new Array(); simple_data.push(d1); simple_data.push(d2); simple_data.push(d3); obj['simple_data'] = JSON.stringify(simple_data);
-
前端如果是多個簡單但不同類型的參數:將這些參數設置到上面定義的空對象的屬性中即可。
//參數中既有String類型,又有Int類型 var d1 = 'a'; var d2 = 1; obj['d1'] = d1; obj['d2'] = d2;
-
前端如果是多個同類型的對象參數:先將這些對象添加到 Array 中,再通過 JSON.stringify 方法轉換成 JSON 字符串,存入到上面定義的空對象中。
//參數中的兩個對象是同一類型的對象,具有相同的屬性 var obj1 = new Object(); obj1['id'] = 1; obj1['code'] = '233'; var obj2 = new Object(); obj2['id'] = 2; obj2['code'] = '332'; var same_complex_data = new Array(); same_complex_data.push(obj1); same_complex_data.push(obj2); obj['same_complex_data'] = JSON.stringify(same_complex_data);
-
前端如果是多個不同類型的對象參數:先將這些對象分別使用 JSON.stringify 方法轉換成 JSON 字符串,然后分別設置到上面定義的空對象的屬性中。
//參數中的兩個對象是不同類型的對象,具有不同的屬性 var obj1 = new Object(); obj1['id'] = 1; obj1['name'] = 'zhangsan'; var obj2 = new Object(); obj2['phone'] = '15666666666'; obj2['email'] = 'example@outlook.com'; obj['obj1'] = JSON.stringify(obj1); obj['obj2'] = JSON.stringify(obj2);
-
-
使用ajax上傳定義的obj對象。
-
后台接收:controller方法直接使用 String 類型參數接收即可。
-
字符串處理
- 如果傳遞的是一個對象,使用 JSON.parseObject(json_str, *.class) 將 JSON 字符串解析為Java對象。
- 傳遞的如果是一個數組,使用 JSONArray.parseArray(json_str, *.class) 將 JSON 字符串解析為包含 Java 對象的 List 集合。
-
-
可能出現的問題:JSON字符串解析成Java對象的時候,注意 JSON 字符串中的屬性應該與Java對象中的屬性一一對應,否則會出現解析異常的問題。