Restful风格的springMVC搭配ajax请求

最近好像很流行Restful,终于弄懂一点眉目。一个小小的ajax请求没反应让我找了半天错误,原来是请求路径写错了。不给提示,坑死哥了。记下来

点击页面按钮,调用以下函数 function ideaStatus(el){
         
  							var self=$(el); 							var status=self.attr(data-status); 							var ideaId=self.attr(data-id); 							var txt=self.text(); 							var txtStatus = self.text(); 							$(#status-confirm p).text(确定 +txt+?); 							status=status==1?0:1; 							$(#status-confirm).dialog({
         
  								title:提示信息, 								autoOpen: true, 								height: auto, 								width: 300, 								modal: true, 								buttons: {
         
  									"确定": function(){		 								    		$.post(admin/idea/check/lock,{
         
  								    			ideaId:ideaId,status:status 								    		},function(data){
         
  								    			$(#status-confirm).dialog("close");				  		  	 							  		  				if(data==success){			 							  		  					self.attr(data-status,status); 							  		  					txt=status==1?锁定:解锁; 							  		  					self.text(txt); 							  		  					$(.app-list).appTip(txtStatus+ 成功); 							  		  				}else{
         
  							  		  					alert(操作失败,请联系系统维护人员); 							  		  				} 								    		},"text");										 	 										}, 									取消: function(){
         
  										$(this).dialog("close"); 									} 								} 							}); 		 	}



@ResponseBody @RequestMapping(value="/check/{operation}",method=RequestMethod.POST) 	public String ideaCheck(@PathVariable("operation")String operation, 			@ModelAttribute("idea") Idea idea){
         
  		Map<String,Object> params = new HashMap<String, Object>(); 		//传参错误直接返回 		if(null != idea && idea.getIdeaId()!=null) 		{
         
  			params.put("ideaId", idea.getIdeaId()); 			if("lock".equals(operation)){
         
  				params.put("status", idea.getStatus()); 			}else if("audit".equals(operation)){
         
  				params.put("auditStatus", idea.getAuditStatus()); 				params.put("score", idea.getScore()); 			} 			ideaService.updateIdea(params); 		} 		return "success"; 	} @ResponseBody 代表是ajax请求,有了此标签就不用像struts2中那样写print.out了,前台还可以指定输出的格式,这里是text,说明是个字符串 @RequestMapping(value="/check/{operation}" 这就是restful风格的写法了,用唯一的url响应一个请求,不用带参数的方式 method=RequestMethod.POST 代表是update操作 (@PathVariable("operation")与requestMapping中的内容一致 @ModelAttribute("idea") Idea idea 实体对象当做一个参数传过来了。注意jsp中的值名称必须和实体对象一致哦



PS:如果返回json格式的数据,一定要加几个包,否则不会调用回调函数
jackson-annotations-2.2.3.jar
jackson-core-2.2.3.jar
jackson-databind-2.2.3.jar

controller的返回值需要改为 Object的
@ResponseBody
@RequestMapping(value="/support", method=RequestMethod.POST)
public Object support(@ModelAttribute("idea") Idea idea,HttpServletRequest req
jsp的
<a href="javascript:;" onclick="ideaStatus(this);" 					class="decr app-status" data-status="${i.status}" 					data-id="${i.ideaId}"> 					<c:if test="${i.status==1}">锁定</c:if> 					<c:if test="${i.status==0}">解锁</c:if> 					</a> 				</p>
经验分享 程序员 微信小程序 职场和发展