1.在请求路径中传递参数
可以在接口路径中用{}来表明它的变量部分,例如:
@GetMapping("/task/{erId}/{trId}")
需要注意的是,在默认情况下,变量中不可以包含URL的分隔符“/”
使用方式:
@GetMapping("/task/{erId}/{trId}") public String callBackInf(@PathVariable("erId") BigDecimal erId, @PathVariable("trId") BigDecimal trId) { System.out.println("" + erId + trId); return "OK"; }
2.传递数组类型的参数配置
springmvc的接口
@ResponseBody @PostMapping("/setMenu") public Map setMenu(@RequestParam(value = "id") Integer id, @RequestParam(required = false, value = "ids[]") Integer[] ids) throws Exception { System.out.println(id); System.out.println(ids); HashMap<Object, Object> map = new HashMap<>(); map.put("id", id); map.put("ids", ids); return map; }
js代码
var param = {id: 1, ids: [1, 2]}; $.ajax({ url: "<%=request.getContextPath() + "/setMenu"%>", type: "POST", dataType: "json", contentType: 'application/x-www-form-urlencoded', data: param, success: function (data) { console.log("data:", data); } });
运行截图效果
注意的地方就是在接口参数那点有“[]”,而在js那点就没得“[]”。
通过ajax提交数组时,会自动在所设定的参数后面增加中括号:“[]”
jQuery会调用jQuery.param序列化参数,jQuery.param( obj, traditional ),默认的话,traditional为false,即jquery会深度序列化参数对象,以适应如PHP和Ruby on Rails框架,但servelt api无法处理,我们可以通过设置traditional 为true阻止深度序列化。这样就可以在后台接口中不添加“[]”了。