笔者对于前台和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¶m2=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入参进行解析,绑定