java前后台参数的接收方式
一般的ajax请求,一般封装为map或者dto,后台比较方便接收,下面是封装为map
function submitEditData(value) {
var valuemap ={rateRuleDatas:value};
var rateRuleDatas = JSON.stringify(valuemap);
$.ajax({
url : 'compilingRule/compilingRuleUpdate.do',//只能是string类型的参数,开头可以有"/",也可以没有
type : 'post', //默认是get,后台可以用@GegMapping获取@RequestMapping接,也put、delete,但一些浏览器不支持
async : false,//默认是true,异步请求,会卡住浏览器,使用时视情况而定
cache : true, //默认是true,下次请求时,从浏览器缓存中加载请求信息,dataType为script时,默认为fasle
dataType : "json",
//服务器的返回类型。JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下:
xml:返回XML文档,可用JQuery处理。html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
script:返回纯文本JavaScript代码。不会自动缓存结果。
json:返回JSON数据。
jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
text:返回纯文本字符串。
contentType : "application/json", //发送到服务器的数据格式,编码类型默认为"application/x-www-form-urlencoded",适用于大多数情况。
data : rateRuleDatas, //Object或string,若是contentType : "application/json",那数据就要JSON.stringify(datas)转为json
success : function(data) {
if (data.code == 200) {
$.messager.alert('提示', data.message, 'info');
datas = [];
columns = [];
initTable();
} else {
$.messager.alert('提示', data.message, 'info');
}
}
beforeSend : function() {
$.messager.progress({
title : '提示',
msg : '数据保存中,请稍候……',
text : ''
});
},
complete : function() {
$.messager.progress('close');
},
error : function(e) {
$.messager.alert('提示', "网络错误,请重试!!", "info");
}
});
@PostMapping("/compilingRuleUpdate.do")
@ApiOperation(value = "修改满编率规则数据", notes = "修改满编率规则数据")
@ResponseBody
public ResultInfo updateCompilingRateRule(@RequestBody Map<String,Object> rateRuleDatas) {
List<Map<String, String>> objlist = (List<Map<String, String>>) rateRuleDatas.get("rateRuleDatas");
String loginUM = getLoginUM();
return compilingRuleService.updateCompilingRule(rateRuleDatas,loginUM);
}
当把js改为var rateRuleDatas = JSON.stringify(value)时,也可以用下面的方式接收,JSON来说net.sf.json.*;
@PostMapping("/compilingRuleUpdate.do")
@ApiOperation(value = "修改满编率规则数据", notes = "修改满编率规则数据")
@ResponseBody
public ResultInfo updateCompilingRateRule(@RequestBody String rateRuleDatas) {
//String loginUM = getLoginUM();
//return compilingRuleService.updateCompilingRule(rateRuleDatas,loginUM);
JSONArray jarr = JSONArray.fromObject(rateRuleDatas);
List<HashMap<String, String>> listmap = (List<HashMap<String, String>>) JSONArray.toCollection(jarr,HashMap.class);
for (HashMap<String, String> hashMap : listmap) {
for (Entry<String, String> entry : hashMap.entrySet()) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
return null;
}
2.文件上传的ajax请求,processData默认是true,把发送请求的数据转为对象。但是上传文件时用false,contentType上传文件时就不能是默认了。让服务器自己解析
//js部分 文件上传
function uploadDoc() {
var form = new FormData();
form.append("file",document.getElementById("commissionTargetFile").files[0]);
$.ajax({
url : 'theoryRateConfig/uploadTheortyExcel.do',
type : "post",
data : form,
cache : false,
processData : false,
contentType : false,
success : function(data) {
}
}
//java 部分
@PostMapping("uploadTheortyExcel.do")
@ResponseBody
public ResultInfo uploadTheortyExcel(HttpServletResponse httpResponse, HttpServletRequest httpRequest) {
ResultInfo resultInfo = new ResultInfo();
//默认上传成功
resultInfo.setCode(ResponseUtil.success_code);
resultInfo.setMessage("文件上传成功");
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) httpRequest;
List<MultipartFile> files = multiRequest.getFiles("file");
MultipartFile file = files.get(0);
return resultInfo;
}
补充:url上get方法请求时,在java方法里用RequestParam 来接
@RequestMapping(value = "hi", method = RequestMethod.GET)
@ResponseBody
public String helloConsumer(@RequestParam String name)
而在post请求时,用@RequestBody 来接
@PostMapping("/bankRankConfig/updatePartyARankRato.do")
@ResponseBody
@ApiOperation(value = "修改甲方排名系数配置", notes = "修改甲方排名系数配置")
public ResultInfo updatePartyARankRato(@RequestBody String ratioDtolist)