@ResponseBody注解在真实项目中的运用

版权声明:本文为博主原创文章,转载表明出处即可,欢迎转载! https://blog.csdn.net/qq_39767955/article/details/82682323
  • 开篇的题外话:这应该是我写的关于spring注解的很实在的第一篇博客,以前也有些其他的注解,但@ResponseBody我是在项目中用了之后体会比较深的,本文所有实例代码全部来自真实项目,也打算把这篇博客当做个人专栏的第一篇文章,如果发现了什么错误,还请留言或私信反馈给我,感激不尽。
  • 需求:某个页面(填写数据后)需要进行保存操作,点击按钮后返回后台对数据操作的结果(保存成功或者异常),若保存成功,跳转到其他页面。  

      分析 :这个需求要求返回保存数据的结果,所以在controller层不能直接return 一个jsp页面

  • 页面和JS代码(点击按钮就不展示了)
    var params = $("#Form").serialize();
    var url = contextPath_js + "/abc/saveContractInfo.pfv?rm="+ Math.random();
	
	$.ajax({
		'type': 'POST',
		'url': url, 
		'data': params,
		'dataType': 'json',
		'success': function(data) {
			hideLoadingDialog();
			if(data.result == 0) {
				alertSuccess(searchExecutingCon());
			}else {
				alertFailue(data.resultMessage);
			}
		}
	}); 

简单解释一下:这是点击事件函数内的代码,第一行把id为form的表的数据序列化为params的参数,通过ajax请求传到后台(controller处理),好了,剩下的等把controller层的代码讲完再解释。

        @RequestMapping(value = "/saveContractInfo")
	@ResponseBody
	public Map<String, Object> saveContractInfo(Form form,Model model,WebRequest request)
	{   
		Map<String, Object> map = new HashMap<String, Object>();
		//逻辑处理了,每个人的可能不一样
		
		
		if(!rsp.isSuccessful()){
			map.put("message", rsp.getRepMsg());
			map.put("result", "1");
			return map;
		}
		map.put("message", "合同保存成功");
		map.put("result", "0");
		return map;
	}

我把逻辑处理部分给去掉了,这不是重点。为什么这里用一个map作为返回值呢?因为我们的需求里面要显示出数据保存的结果,如果代码正常执行,if判断是进步去的,直接返回最下面的那个map,注意这个map存储了哪些东西。

好了,现在回到js代码,if(data.result == 0)这里进行了一次判断,data就是我们在controller层返回的那个map对象(当然除了叫data,也可以给它任何JavaScript关键字之外的任何名字,比如也叫map),因为保存成功后哎map里面存储的是map.put("result", "0");,所以if(data.result == 0)这个判断语句会进入,alertSuccess(searchExecutingCon())方法会把map.put("message", "合同保存成功")中的合同保存成功用一个弹窗的形式显示出来,并且执行searchExecutingCon()方法,这个方法的作用是跳转到另一个页面。

  • 总结 :@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。返回结果假如是字符串则直接将字符串写到客户端,假如是一个对象(这里是map对象),此时会将对象转化为json串然后写到客户端。

猜你喜欢

转载自blog.csdn.net/qq_39767955/article/details/82682323