Spring MVC中返回json的操作

       最近公司来了几个新员工,让我给他们做一些培训。其中就包括Spring MVC。由于自己接触的也不多,所以也常常会碰到一些问题。现在把这些问题记录下来,以免以后遇到问题的时候又找不到解决办法。

       由于我让他们做了一个简版的微博系统,也就出现了对听众的“取消”和“立即收听”的操作,而这一下操作必须使用ajax实现,才能保证页面的局部刷新效果。而这就涉及到了json数据的返回值问题。

说明:代码是在新员工编写的代码上进行修改的,有些地方可能会有些冗余,但是不影响效果,仅供参考。

操作步骤如下:

1、在项目中引入使用json需要的两个jar包:

jackson-core-lgpl-1.8.5.jar和jackson-mapper-asl-1.8.5.jar

2、在Controller的相应方法上加上@ResponseBody,该方法的返回值可以为POJO对象,也可以为Map。

使用Map的实现代码如下:

@RequestMapping(value = "/deleteListen",method = RequestMethod.POST)
	@ResponseBody
	public Map<String, String> deleteListen(HttpServletRequest request,String microblogid, String operatorType){
		User user = (User) request.getSession().getAttribute("user");
		String listenid = user.getMicroblogid();
		Map<String, String> map = new HashMap<String, String>();
		try{
			if("cancel".equals(operatorType)){// 取消操作
				// 从LISTEN表中删除
				listenService.deleteListen(listenid, microblogid);
				// 操作状态变为"立即收听"
				map.put("operatorState", "立即收听");
				// 收听状态变为""
				map.put("tuneState", "");
			}else{// 立即收听操作
				// 添加收听人到LISTEN表中
				listenService.save1Listen(listenid, microblogid);
				// 操作状态变为"取消"
				map.put("operatorState", "取消");
				// 被收听的人收听了当前用户
				if(listenService.isListen(microblogid, listenid)){
					// 收听状态变为"已互听"
					map.put("tuneState", "已互听");
				}else{
					// 收听状态变为"已收听"
					map.put("tuneState", "已收听");
				}
			}
			map.put("result", "success");
		}catch (Exception e) {
			map.put("result", "fail");
		}
		return map;
	}

 使用POJO类的代码如下:

 

@RequestMapping(value = "/deleteListen",method = RequestMethod.POST)
	@ResponseBody
	public Operator deleteListen(HttpServletRequest request,String microblogid, String operatorType){
		User user = (User) request.getSession().getAttribute("user");
		String listenid = user.getMicroblogid();
		Operator operator = new Operator();
		try{
			if("cancel".equals(operatorType)){// 取消操作
				// 从LISTEN表中删除
				listenService.deleteListen(listenid, microblogid);
				// 操作状态变为"立即收听"
				operator.setOperatorState("立即收听");
				// 收听状态变为""
				operator.setTuneState("");
			}else{// 立即收听操作
				// 添加收听人到LISTEN表中
				listenService.save1Listen(listenid, microblogid);
				// 操作状态变为"取消"
				operator.setOperatorState("取消");
				// 被收听的人收听了当前用户
				if(listenService.isListen(microblogid, listenid)){
					// 收听状态变为"已互听"
					operator.setTuneState("已互听");
				}else{
					// 收听状态变为"已收听"
					operator.setTuneState("已收听");
				}
			}
			operator.setResult("success");
		}catch (Exception e) {
			operator.setResult("fail");
		}
		return operator;
	}

 3、页面中ajax的调用方法如下:

 

function operator(obj, microblogid){
			var date = new Date();
			var operatorType = $(obj).text();
			if(operatorType == "取消"){
				operatorType = "cancel";
			}else{
				operatorType = "tune";
			}
			$.ajax({
				url: "<%=path%>/deleteListen",
				type : "post",
				dataType : "json",
				data : "microblogid=" + microblogid + "&operatorType=" + operatorType + "&date=" + date,
				success : function(result) {
					if(result.result == "success"){
						$(obj).text(result.operatorState);
						$(obj).parent().prev().find("a").text(result.tuneState);
					}else{
						alert("操作失败");
					}
				},
				error : function() {
					alert("访问失败");
				}
			});
		}

 页面部分的内容如下:

<c:forEach var="userandlisten" items="${tunelist}" varStatus="count"> 
  <tr>
    <td align="right"><a href="selectBroadcast?microblogid=${userandlisten.listenid }">${userandlisten.username}</a>&nbsp;&nbsp;</td>
    <td align="right" width="80">${userandlisten.remark}&nbsp;</td>
    <td align="left"><a href="remarkName?listenid=${userandlisten.listenid }" id="remark">${userandlisten.addremark}</a></td>
    <td align="right"><a href="listenState?listenid=${userandlisten.listenid }">${userandlisten.describe}</a></td>
	<td align="left">&nbsp;<a href="javascript:void(0);" οnclick="operator(this, '${userandlisten.listenid }');">取消</a></td>
  </tr>
</c:forEach>

 需要注意的是:

我并没有在spring的配置文件中加入类似下面的配置,之前在网上查找资料的时候好多人多说需要加上这个配置,但是我没加也是好用的:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<ref bean="mappingJacksonHttpMessageConverter" />
			</list>
		</property>
	</bean>
	<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
	    <property name="supportedMediaTypes">  
	        <list>  
	            <value>application/json;charset=UTF-8</value>  
	            <value>text/html;charset=UTF-8</value>
	        </list>  
	    </property>  
	</bean>  

 但是,我的spring3-servlet.xml中有如下配置:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
		<property name="prefix" value="/WEB-INF/view/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

 这样就OK啦。

 

 相关jar包也上传一下吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值