最近在学习SpringMVC与前端进行数据交互,其中比较常用的就是使用json,在学习期间遇到不少问题,特记录一下。
1.准备工作(jar包的引入)
1.1 jackson包
1.2 jquery包
1.3 spring的核心包
2.spring的配置
在springmvc中想要使用ajax传递json与后台交互需要配置
<mvc:annotation-driven/>
<mvc:resources location="/js/" mapping="/js/**"/>
第一个是实现注解开启,用于json转换器的开启
第二个是配置spring对静态资源的访问处理,否则该资源也会被DispatcherServlet拦截。(开始时我也没有注意,发现调用到jq文件时总是报404错误)
3.json传递的方式
3.1 传递json串
<!-- 前端页面代码,定义两个from表单,第一个提交数据到后台
然后后台处理返回到第二个表单-->
<from> <input type="text" id="u1" name="u1" />
<br />
<input type="text" id="p1" name="p1" />
<br />
<input type="button" value="提交" onclick="returnJson()" /> </from>
<br />
<from> <input type="text" id="u2" name="u2" />
<br />
<input type="text" id="p2" name="p2" /> </from>
对应的js代码
function returnJson() {
var u1 = $("#u1").val();
var p1 = $("#p1").val();
var user = {
username : $("#u1").val(),
password : $("#p1").val()
};
alert(user.username);
$.ajax({
type : 'post',
url : '${pageContext.request.contextPath}/returnjson',
contentType : 'application/json;charset=utf-8',
data : JSON.stringify(user),
success : function(data) {
$("#u2").val(data.username);
$("#p2").val(data.password);
}
})
}
其中stringify()用于从一个对象解析出字符串,如
var a = {a:1,b:2}
结果:
JSON.stringify(a)
“{“a”:1,”b”:2}”
后台的 Controller代码
@Controller
public class jsonAction {
@RequestMapping("/returnjson")
@ResponseBody
public User returnJson(@RequestBody User user)
{
String username=user.getUsername();
String password=user.getPassword();
System.out.println(username+" "+password);
user.setUsername(username+"c");
user.setPassword(password+"c");
return user;
}
}
需要写一个User的bean实体。
其中
@RequestMapping:url的映射处理
@ResponseBody :将java对象转化为json串,这样前端才能解析
@RequestBody :将json串转化为java对象,这样才能以bean处理
实际效果图:
3.2以key/value的格式
第一种:
{"username":"reader001","password":"psw001"}
第二种:
username=reader001&password=psw001
其中第一种的传递与以json串的传递处理方式一样
第二种的话就不需要@RequestBody,因为它不是json格式。但是返回还是需要使用@ResponseBody进行转换。
需要注意的就是
1. 静态资源的配置
2. json.stringify()
3. @ResponseBody 和 @RequestBody的使用
以上参考博客:http://blog.csdn.net/eson_15/article/details/51742864