ajax向springmvc的Controller传递数据

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,如果有什么不对的地方可以大大方方的提出,我多加修改

猜你喜欢

转载自blog.csdn.net/codeHaoHao/article/details/82835240