Ajax Json交互分為兩個方向:
- 前端到后臺:前端ajax發(fā)送json格式字符串萨惑,后臺直接接收為pojo參數(shù),后臺使用@RequstBody写穴;
- 后臺到前端:后臺直接返回pojo對象,前端接收未json對象或者字符串,后臺使用注解@ResponseBody伤为;
@ResponseBody注解
@ResponseBody注解的作用是將controller的方法返回的對象通過適當?shù)霓D(zhuǎn)換器轉(zhuǎn)換成指定格式后,寫入到response對象的body區(qū)据途,通常用來返回JSON數(shù)據(jù)或者XML數(shù)據(jù)绞愚。注意:在使用此注解之后不會在走視圖解析器,而是直接將數(shù)據(jù)寫入到輸入流中颖医,它的效果等同于通過response對象輸出指定格式的數(shù)據(jù)位衩。
Spring MVC 使用JSON交互
引入json相關(guān)jar包
Spring MVC想要使用JSON進行數(shù)據(jù)交互,需要引入基礎的JSON依賴包
<!--json數(shù)據(jù)交互所需jar熔萧,start-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<!--json數(shù)據(jù)交互所需jar蚂四,end-->
代碼事例
- 前端頁面及js代碼
-
引入jquery.min.js
將ajax需要使用到的jquery.min.js放置到WEB-INF目錄中
- Spring MVC 處理靜態(tài)資源
修改springmvc.xml文件光戈,添加 mvc:resources 標簽,讓SpringMVC框架自己處理靜態(tài)資源遂赠,否則前端ajax的js無法使用jquery.min.js
<!--靜態(tài)資源配置久妆,方案二,SpringMVC框架自己處理靜態(tài)資源
mapping:約定的靜態(tài)資源的url規(guī)則
location:指定的靜態(tài)資源的存放位置-->
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
- jsp頁面代碼
<div>
<h2>Ajax json交互</h2>
<fieldset>
<input type="button" id="ajaxBtn" value="ajax提交"/>
</fieldset>
</div>
- ajax js請求代碼
<head>
<title>SpringMVC 測試頁</title>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script>
$(function () {
$("#ajaxBtn").bind("click",function () {
// 發(fā)送ajax請求
$.ajax({
url: '/demo/handle07',
type: 'POST',
data: '{"id":"1","name":"李四"}',
contentType: 'application/json;charset=utf-8',
dataType: 'json',
success: function (data) {
alert(data.name);
}
})
})
})
</script>
<style>
div{
padding:10px 10px 0 10px;
}
</style>
</head>
- 后臺Handler代碼
前端通過ajax向后臺發(fā)送請求跷睦,將user對象轉(zhuǎn)換成JSON字符串請求到后臺的Handler筷弦。后臺的Handler收到JSON數(shù)據(jù)后,通過@RequestBody注解將JSON字符串轉(zhuǎn)換成User對象抑诸,后臺Handler修改User對象后烂琴,通過@ResponseBody注解將user對象轉(zhuǎn)換成JSON字符串,響應到頁面蜕乡。
/**
* 添加@ResponseBody之后奸绷,不再走視圖解析器那個流程,
* 而是等同于response直接輸出 數(shù)據(jù)
*/
@RequestMapping("/handle07")
public @ResponseBody User handle07(@RequestBody User user) {
System.out.println(user);
// 業(yè)務邏輯處理层玲,修改name為張三豐
user.setName("張三豐");
return user;
}