spring @RequestParam, @RequestBody Map注入注意事項

該博客內容不只限於對map的注意項,對其餘pojo同樣有效。map只是給示例而已。

 

一、@RequestBody

1.1 一個參數時

@RequestMapping(value="/test3",method=RequestMethod.POST)
public boolean test3(@RequestBody Map<String, String> fieldValueList) {
	System.out.println(JSON.toJSONString(fieldValueList));
	return true;
}

測試方式:java

1.2 多個參數時

@RequestMapping(value="/test4",method=RequestMethod.POST)
public boolean test4(@RequestParam("key") String key,@RequestBody Map<String, String> fieldValueList) {
	System.out.println(key+":"+JSON.toJSONString(fieldValueList));
	return true;
}

測試方式:ajax

錯誤方式以下圖所示,會拋出異常spring

「org.springframework.http.converter.HttpMessageNotReadableException」:編程

 

總結:

  • @RequestBody須要把全部請求參數做爲json解析,所以,不能包含key=value這樣的寫法在請求url中,全部的請求參數都是一個json
  • 直接經過瀏覽器輸入url時,@RequestBody獲取不到json對象,須要用java編程或者基於ajax的方法請求,將Content-Type設置爲application/json

  

二、@RequestParam

2.1 一個參數時

@RequestMapping(value="/test",method=RequestMethod.POST)
public boolean test(@RequestParam Map<String, String> fieldValueList) {
	System.out.println(JSON.toJSONString(fieldValueList));
	return true;
}

測試方式:json

獲得結果爲:{"aa":"bb","cc":"dd"}瀏覽器

錯誤方式:app

獲得結果:{"fieldValueList":"{\"aa\":\"bb\",\"cc\":\"dd\"}"},並非咱們想要的。測試

2.2 多個參數時

@RequestMapping(value="/test2",method=RequestMethod.POST)
public boolean test2(@RequestParam("key") String key, @RequestParam Map<String, String> fieldValueList) {
	System.out.println(JSON.toJSONString(fieldValueList));
	return true;
}

錯誤方式:url

獲得結果:{"key":"aa","aa":"bb","cc":"dd"},並非咱們想要的。多出了"key":"aa"。spa

 

獲得結果:{"fieldValueList":"{\"aa\":\"bb\",\"cc\":\"dd\"}","key":"aa"},並非咱們想要的。

 

總結:

  • @RequestParam參數中包含Map時,不要再寫其餘參數了,不然,map都會包含進去。
相關文章
相關標籤/搜索