index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <% String path = request.getContextPath(); %> <html> <script type="text/javascript" src="<%=request.getContextPath()%>/script/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/jquery.json-2.4.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/script/jquery.form.js"></script> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript"> function test_2(){ var postURL = "<%=request.getContextPath()%>/jsonController/receive_jsonData_2?date="+new Date()+""; //第2种简单的方法 var formData = jQuery("#json_form2").serializeArray(); //将这个数组转为json的对象。 var jsonData = convertArray(formData); //将json对象转为字符串后,才能发送。 var jsonDataStr = jQuery.toJSON(jsonData); jQuery.ajax({ //请求 type: "POST", url: postURL, data: jsonDataStr, contentType:"application/json", //返回 dataType: "json", success: function(msg){ alert( "Data Saved: " + msg ); } }); } function convertArray(o) { //主要是推荐这个函数。它将jquery序列化后的值转为name:value的形式。 var v = {}; for (var i in o) { if (typeof (v[o[i].name]) == ‘undefined‘) v[o[i].name] = o[i].value; else v[o[i].name] += "," + o[i].value; } return v; } </script> </head> <body> <form method="post" id="json_form2" action=""> <input type="text" name="dogid" id="dogid" value="用户名"/> <input type="text" name="dogname" id="dogname" value="复选框1"/> <input type="button" value="发送是一个json字符串" onclick="test_2();"/> </form> </body> </html>
controller
/** * Spring中接收json对象的2种方式 * * RequestBody DogBean dogBean * * 不加RequestBody,表示接收的是一个普通的GET或者POST的请求,请求中的参数与Bean中的属性一致。 Bean即可接收。 * * 加RequestBody,表示接收的是一个json字符串的请求数据,Spring会自动将json字符串转成json对象 。 * * */ @RequestMapping(value = "/receive_jsonData_2") public String receive_jsonData_2(@RequestBody DogBean dogBean) { System.out.println("dogBean = " + dogBean); System.out.println(dogBean.getDogid() + "\t" + dogBean.getDogname()); return null; }
- 如果这里不加@RequestBody ,那么将无法将request里的参数封装到dogBean中,因为request里的数据格式是json格式,而自动封装的格式为“dogid=1&dogname=dog1” 这种格式才能自动封装。
时间: 2024-10-16 20:21:56