主要內容:
這篇文章主要是總結以前使用springmv接收json的時候遇到的問題,下面經過前臺發送ajax數據後天springmvc接收,總結springmvc接收並處理ajax的問題。ajax
注意點:
一、前臺發送ajax數據時必須設置的屬性:
contentType='application/json'
若是不設置,後臺獲取到的將是url編碼的文本,該屬性是指定發送的數據的類型爲json。
二、本文後臺使用fastjson解析jsonspring
jspjson
function fun(){ $.ajax({ url:'/testAjax.action', data:"{'name':'xujie','age':'25'}", type:'POST', dataType:'json', contentType:'application/json' }) }
contentType:'application/json' //告訴服務器我發送的是json格式數據
dataType:'json',//告訴服務器,我要接收的是json格式數據數組
Controller服務器
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST) public void testAjax(@RequestBody String jsonstr){ JSONObject jsonObject = JSONObject.parseObject(jsonstr);//將json字符串轉換成json對象 String age = (String) jsonObject.get("age");//獲取屬性 System.out.println(age); }
@RequestMapping(value = "/testAjax.action",method = RequestMethod.POST) @ResponseBody public String testAjax(@RequestBody String jsonstr){ Person person = JSONObject.parseObject(jsonstr, Person.class);//將json字符串轉換成json對象 System.out.println(person); return "200"; }
輸出
mvc
Controllerapp
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST) public void testAjax(@RequestBody String jsonstr){ JSONArray array = JSONObject.parseArray(jsonstr); JSONObject jsonObject = JSONObject.parseObject(array.get(0).toString()); String name = (String) jsonObject.get("name"); System.out.println(name); //獲取到了第一個對象的name }
jspjsp
function fun(){ $.ajax({ url:'/testAjax.action', data:"[{'name':'xujie','age':'25'},{'name':'yuanxiliu','age':'20'}]", type:'POST', dataType:'json', contentType:'application/json' }) }
輸出
maven
List/map
Controllerpost
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST) @ResponseBody public ArrayList<String> testRequestBody() { //這裏以list爲例,map跟這個同樣的 ArrayList<String> list = new ArrayList<String>(); list.add("apple"); list.add("orange"); list.add("pea"); return list; }
jsp
function fun(){ $.ajax({ type : "post", dataType : "json", url : "/testAjax.action", success : function(result) { alert(JSON.stringify(result)); } }); }
****要點:****
在我作這篇總結的時候,一直忘了一個事,致使使用@ResponseBody返回的時候,前臺一直報錯:406 (Not Acceptable) 最終發現若是使用@ResponseBody必需要添加jackson的依賴,由於springmvc在作返回的時候經過jackson去判斷返回什麼類型,我這裏用的maven因此添加依賴:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency>
Controller
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST) public void testAjax(HttpServletResponse response){ ArrayList<String> list = new ArrayList<String>(); list.add("apple"); list.add("orange"); list.add("pea"); String jsonlist = JSON.toJSONString(list); response.getWriter().write(jsonlist); }
jsp
function fun(){ $.ajax({ url:'/testAjax.action', type:'POST', dataType:'json', contentType:'application/json', success:function(data){ alert(JSON.stringify(data)); } }) }
Controller
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST) public void testAjax(HttpServletResponse response){ HashMap<String, String> map = new HashMap<String, String>(); map.put("name","xujie"); map.put("age","23"); String jsonlist = JSON.toJSONString(map); response.getWriter().write(jsonlist); }
jsp
function fun(){ $.ajax({ url:'/testAjax.action', type:'POST', dataType:'json', contentType:'application/json', success:function(data){ alert(JSON.stringify(data)); } }) }
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST) @ResponseBody public void testAjax(HttpServletResponse response) throws Exception { Person person = new Person(); person.setAge("23"); person.setName("xujie"); String string = JSON.toJSONString(person); response.getWriter().write(string); }
jsp
function fun(){ $.ajax({ url:'/testAjax.action', type:'POST', dataType:'json', contentType:'application/json', success:function(data){ alert(JSON.stringify(data)); } }) }