1. 程式人生 > >spring mvc 集合、陣列傳參(本質是json物件的處理)

spring mvc 集合、陣列傳參(本質是json物件的處理)

問題概述:

在前臺,js已經獲取到對應的資料,但這些資料是集合型別(也就是json陣列格式的),此時無法傳遞到後臺。

要進行處理,將json格式的資料轉換成String型別的,就可以成功獲取到了。

下面貼上程式以供參考:

1.實體類

public class PersonInfoView extends BaseView{
	private static final long serialVersionUID = 7021289717934645058L;
	private String personOid;
	private String personName;
	private String personIdentityNo;
       //setter and getter
}
public class PersonInfoListForm {
	public List<PersonInfoView> personInfos = new ArrayList<PersonInfoView>();
        //setter and getter
}
2.ajax請求controller
@RequestMapping(value = "/getPersonsByDept.do")
public @ResponseBody ExtJsonForm getPersonsByDept(HttpServletRequest request, String deptGbcode) throws Exception{
	PersonInfoListForm personInfoform = new PersonInfoListForm();
	if (!StringUtils.isEmpty(deptGbcode)) {
		List<PersonInfoView> personInfos = personInfoService.getPersonsByDeptCode(deptGbcode);
		personInfoform.setPersonInfos(personInfos);
	}
	return ExtJsonForm.warpExtJsonForm(true,personInfoform);
}
此時返回的資料是一個PersonInfoForm的例項,由ajax的resp.data接收

3.ajax請求成功後請求的controller
@RequestMapping(value = "/personsToselect.do")
public @ResponseBody ModelAndView personsToselect(HttpServletRequest request, String personsInfoForm) {
	Map<String, Object> hm = new HashMap<String,Object>();
	if (personsInfoForm != null) {
		PersonInfoListForm personList = JsonUtil.formatObject(personsInfoForm, PersonInfoListForm.class);
		if (personList.personInfos != null) {
			hm.put("personsInfos", personList.personInfos);
		}
	}
	return new ModelAndView("/web/module/business/personsToSelectFrame.jsp", hm);
}

注意:此時以resp.data裡的資料傳遞過來再次發出另一個請求,則引數personInfoForm不可標記為PersonInfoForm,而必須是String型別,因為經過ajax請求成功後獲取到的resp.data裡的資料本身是json格式的,並且是一個json陣列,請求無法解析,必須進行格式轉換。

引數以string形式接收到之後,再使用JsonUtils轉換成PersonInfoForm型別的資料。(JsonUtils為自定義的json轉換器


4.ajax請求

SW.ajax({
	url : Config.ROOT+'/personInfo/getPersonsByDept.do?deptGbcode='+treeNode.value,
	method : 'POST',
	success : function(resp) {
		if (resp.data != null) {
			var url = Config.ROOT+"/business/personsToselect.do?personsInfoForm="+JSON.stringify(resp.data);
			$("#personsToSelectFrame").attr("src",url);
		}
	}
});

上述程式碼中,使用JSON.stringify將陣列物件轉換成字串,再進行傳遞即可。

由字串轉換成json格式的方法是JSON.parse()。