ajax传参结合spring 3.X总结

笔者对于前台和controller交互数据,即http请求数据格式有疑惑,先做如下总结笔记:

附带fiddle工具使用方法,来测试http请求接口


ajax传json数据格式

 var json = { "ids": 123, "displayFlag": 1, "etnId": 456};
	    var request = $.ajax({  
	        url: url,  
	        type: "POST",  
	        async: false,  
	        data: JSON.stringify(json),
	        dataType: "json",  
	        contentType: "application/json; charset=utf-8", 
	        cache: false,  
	        success: function (r, textStatus) {  
	        	query("dg",null);//刷新datagrid
	        },  
	        error: function (XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.readyState); }  
	    });  
最关键的:

@1.JSON.stringify(json)   定义的json 是个字符串,需要首先调用js的stringify转为json string

@2. contentType: "application/json; charset=utf-8",          值得是数据以json的格式进行传输,

默认是 contentType: "application/x-www-form-urlencoded; charset=utf-8"

我的理解这种传输的是字符串


VcUpdateCommentVo.java

public class VcUpdateCommentVo {

	private String ids;
	
	private boolean displayFlag;
	
	private String etnId;

	public String getIds() {
		return ids;
	}

	public void setIds(String ids) {
		this.ids = ids;
	}

	public boolean isDisplayFlag() {
		return displayFlag;
	}

	public void setDisplayFlag(boolean displayFlag) {
		this.displayFlag = displayFlag;
	}

	public String getEtnId() {
		return etnId;
	}

	public void setEtnId(String etnId) {
		this.etnId = etnId;
	}
}
定义一个request bean供controller中使用,ids、displayFlag、etnId对应着请求ajax请求中的json


控制器中获取ajax请求参数

 @RequestMapping("/batchUpdateCommentStatus")
    @ResponseBody
    public int batchUpdateCommentStatus(@RequestBody VcUpdateCommentVo vcUpdateCommentVo){
    	return 0;
    }
@1.@RequestBody ,一句话就是此spring注解会识别context-type中application/json,解析前台json绑定到 VcUpdateCommentVo上




结果展现



通过fiddle观察http请求:




字符串传参方式

_json = { "ids": 123456, "displayFlag": 1, "etnId": 789};
	    var request = $.ajax({  
	        url: url,  
	        type: "POST",  
	        async: false,  
	        data: _json, 
	        contentType: "application/x-www-form-urlencoded; charset=utf-8",  
	        cache: false,  
	        success: function (r, textStatus) {  
	        	query("dg",null);//刷新datagrid
	        },  
	        error: function (XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.readyState); }  
	    });  
@1.contentType: "application/x-www-form-urlencoded; charset=utf-8",  指定contentType为 字符串传值类型,contentType不配置时候,也是此默认值,并且data:_json会配合contentType把所谓的JSON格式转成下面这种请求数据格式。

ids=123456&displayFlag=1&etnId=789

参考:http://tool.oschina.net/apidocs/apidoc?api=jquery


为验证,从fiddle中搂取http请求。


被ajax转成浏览器请求的格式了, 即 ?param1=xx&param2=xx


后台控制器获取数据:

 @RequestMapping("/batchUpdateCommentStatus")
    @ResponseBody
    public int batchUpdateCommentStatus(
    		@RequestParam(value = "ids", required = true)String ids,
    		@RequestParam(value = "displayFlag", required = true)boolean displayFlag,
    		@RequestParam(value = "etnId", required = true)String etnId){
    	String hideUserName = getCurrentUsername();
    	int updateRows = vcCarWashCommentService.batchUpdateCommentStatus(ids, displayFlag, hideUserName, etnId);
    	logger.info("批量更新用户评论信息从session获取的用户名为:" + hideUserName + "成功更新条数为:" + updateRows);
    	return updateRows;
    }
@1.这里使用@RequestParam获取每一个入参对象




总结:

前台:ajax中指定contentType告诉http的接收方我送什么格式数据给你,我可以送字符串,送对象(包含json,xml格式对象)

后台:对于普通的字符串参数,使用@RequestParam获取参数即可,其他的均要使用@RequestBody对Object入参进行解析,绑定
































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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值