json数据转换
为了实现浏览器与控制器类(controller)之间的数据交互,Spring提供了一个HttpMessageConverter<T>接口来完成此项工作。该接口主要用于将请求信息中的数据转换为一个类型为T的对象,并将类型为T的对象绑定到请求方法的参数中,或者将对象转换为响应信息传递给浏览器显示。
Spring为HttpMessageConverter<T>接口提供了很多实现类,这些实现类可以对不同类型的数据进行信息转换。其中MappingJackson2HttpMessageConverter是SpringMVC默认处理JSON格式请求响应的实现类。该实现类利用jackson开源包读写JSON数据,将java对象转为json对象和xml文档,同时也可以将json对象和xml文档转换为java对象。
要使用MappingJackson2HttpMessageConverter对数据进行转换,就需要使用Jackson的开源包,开发时所需的开源包及其描述如下:
- jackson-annoations-2.8.8.jar:Json转换注解包
- jackson-core-2.8.8.jar:Json转换核心包
- jackson-databind-2.8.8.jar:Json转换的数据绑定包
以上三个版本是我用的版本,大家可以在“http://mvnrepository.com/artifact/com.fasterxml.jackson.core”下载各种版本。
在使用注解式开发时,需要用到两个重要的JSON格式转换注解,分别是@RequestBody和@ResponseBody,这两个注解的说明:
注释 | 说明 |
@RequestBody | 用于将请求中的数据绑定到方法的形参中。该注解用在方法的形参上 |
@ResponseBody | 用于直接返回return对象。该注解用在方法上 |
用ajax传递数据
ajax
在用ajax时还需要引入jquery.js文件
<script type="text/javascript" src="assets/js/jquery-2.1.0.js" ></script>
//删除一个
function deleteById(id) {
if(confirm("确定要删除吗?")){
$.ajax({
type:"post",
url:"deleteCategoryById.action",//服务器端请求地址
async:true,//true为异步
data:{"id":id},//传递的数据
dataType:"json",//告诉服务器,我想要什么类型的数据
//contentType:"application/json;charset=UTF-8",//告诉服务器我要发送什么类型的数据
success:function(data){//成功时处理函数,data为Controller层返回的数据
if (data==1) {
alert("删除成功");
$("#tr_"+id).remove();
} else{
alert("删除失败");
}
},
error:function(){
alert("error");
}
});
}
}
Controller
/*通过ID删除category*/
@RequestMapping(value="/deleteCategoryById.action",method=RequestMethod.POST)
@ResponseBody
public String deleteCategoryById(@RequestParam("id")int id,HttpServletResponse response){
System.out.println(id);
if(categoryService.deleteCategoryById(id)>0)return "1";
else return "0";
}
@ResponseBody主要作用是用于直接返回数据给前端的ajax,如果没有@ResponseBody注解那么Controller层return的数据会被springMVC拦截,无法将数据返回给ajax的data。
这个Controller的@RequestParam("id")是可以省略的,因为ajax的data为{"id":id},这个属性id名和Controller层的id一样,所以@RequestParam("id")可以省略。
本人初学ajax和ssm,如果有什么不对的地方可以大大方方的提出,我多加修改