天天看点

Spring MVC 处理 ajax请求

这儿  记录 ajax请求的情况,主要涉及到Spring MVC的两个注解 @RequestBody 和 @ResponseBody

 [email protected] 注解  

           如果get或post请求中 参数是 application/x-www-form-urlencoded编码方式,@RequestBody 可以处理;如果参数是application/json,application/xml等 格式的数据,必须使用@RequestBody来处理。

[email protected]  表示该方法的返回结果直接写入HTTP response body中

      Spring MVC项目中 使用@RequestMapping后,方法返回结果通常解析为跳转路径。 加上@ResponseBody后,方法返回结果不会被解析为跳转路径,而是直接写入Http repsonse body中。所以说@ResponseBody注解一般用在异步获取数据时使用, 比如异步获取json数据,加上@responsebody后,会直接返回json数据。

3.例子,如下 ajax请求 提交传递数据是application/json格式,所以controller方法中用@RequestBody注解来接收参数  

.jsp文件 ajax请求提交

<html>
<body>
	<form>
		<div>
			<input type="button" onclick="ajaxSubmit()" value="ajaxSubmit" />
		</div>
	</form>

	<script type="text/javascript">
		 
		//创建 XMLHttpRequest 对象
		var xmlHttp;
		function createXMLHttpRequest() {
			if (window.XMLHttpRequest) { // code for all new browsers 
				xmlHttp = new XMLHttpRequest();
			} else if (window.ActiveXObject) { // code for IE5 and IE6
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			console.log("xmlHttp===", xmlHttp);
		}

		function ajaxSubmit() {
			//创建 XMLHttpRequest 对象
			createXMLHttpRequest();
			//需要传到后台的参数,json对象
			var jsonData = {
				name : 'no name',
				tel : 18355556666,
				psw : 123456
			};
			//把json对象转为字符串
			var strJsonData = JSON.stringify(jsonData);
			console.log("jsonData", jsonData);
			//mapping 到 controller 中 方法上
			var url = "/SpringMVCDemo/ajax/ajaxSubmit";  //重要:这个要加/
			//接收返回值
			xmlHttp.onreadystatechange = function() {
				if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
					console.log("xmlHttp.responseText==",xmlHttp.responseText);
					var json = JSON.parse(xmlHttp.responseText); //把字符串转为json对象
					console.log("json.result==",json.result); //通过key值 获取json对象的value值
				}
			}
			//以post方法提交参数
			xmlHttp.open("POST", url, true);
			xmlHttp.send(strJsonData);

		}
	</script>
</body>
</html>
           

java文件 用 @ResponseBody返回数据   @RequestBody接收数据

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("ajax")
public class AjaxController {

	@ResponseBody
	@RequestMapping(value = "/ajaxSubmit", method = RequestMethod.POST)
	public String ajaxSubmit(@RequestBody String strData) throws IOException {

		System.out.println("ajaxSubmitForm  收到的参数  strData==" + strData);
		// 把string类型的参数 转为 jsonObject对象
		JSONObject jsonObject = new JSONObject(strData);
		System.out.println("jsonObject====" + jsonObject.toString());
		// 根据key值获取value值
		System.out.println("tel===" + jsonObject.getLong("tel"));

		// retrun data
		JSONObject json = new JSONObject();
		json.put("result", "@ResponseBody test success");
		json.put("remark", "so happy @ResponseBody works!");
		return json.toString();
	}

	//或者用HttpServletResponse返回数据
	@RequestMapping(value = "/ajaxSubmit2", method = RequestMethod.POST)
	public String ajaxSubmit2(@RequestBody String strData, HttpServletResponse response) throws IOException {
		System.out.println("ajaxSubmitForm  收到的参数  strData==" + strData);
		// retrun data
		JSONObject json = new JSONObject();
		json.put("result", "success");
		json.put("remark", "can tranfer data ");
		PrintWriter writer = response.getWriter();
		response.setContentType("application/json;charset=utf-8");
		writer.print(json.toString());
		writer.close();

		return null;
	}
}
           

其实点击ajaxSubmit请求,其实它的请求方式,请求头,请求体如下。

Spring MVC 处理 ajax请求

继续阅读