如何通过AJAX向Spring Boot Controller传递count与pno参数?
问题描述
我通过以下JS代码向Spring Boot Controller传递count和pno参数,但一直无法成功接收:
JS 代码
console.log(count);//10 console.log(pno);//4 var form = { count:count, pno:pno } $.ajax({ url: 'product/basket/change', type: 'POST', data:form });
Spring Boot Controller 代码
@ResponseBody @PostMapping("/product/basket/change") public void basketChange(@RequestParam(name = "form") Map<String, String> data ....){ .... }
解决方法
问题出在Controller的参数接收逻辑上:AJAX发送的是count和pno两个独立参数,而非名为form的复合参数,以下是几种可行的修正方案:
方案1:直接接收单个参数
在Controller方法中直接声明对应参数,Spring会自动完成参数映射:
@ResponseBody @PostMapping("/product/basket/change") public void basketChange(@RequestParam Integer count, @RequestParam Integer pno) { // 直接使用count和pno参数 }
方案2:用Map接收所有请求参数
去掉@RequestParam的name="form"属性,直接用Map接收所有请求参数:
@ResponseBody @PostMapping("/product/basket/change") public void basketChange(@RequestParam Map<String, String> data) { Integer count = Integer.parseInt(data.get("count")); Integer pno = Integer.parseInt(data.get("pno")); // 后续业务逻辑 }
方案3:用实体类封装参数
如果参数数量较多,可定义实体类统一封装:
实体类定义
public class BasketForm { private Integer count; private Integer pno; // 生成getter、setter方法 }
Controller修改
@ResponseBody @PostMapping("/product/basket/change") public void basketChange(BasketForm form) { Integer count = form.getCount(); Integer pno = form.getPno(); // 后续业务逻辑 }
额外说明
- 你的AJAX代码无需修改,
$.ajax默认会将form对象序列化为application/x-www-form-urlencoded格式,Spring可直接解析。 - 若要改用JSON格式传递参数,需修改AJAX配置并调整Controller接收方式:
对应Controller:$.ajax({ url: 'product/basket/change', type: 'POST', contentType: 'application/json', data: JSON.stringify(form) });@ResponseBody @PostMapping("/product/basket/change") public void basketChange(@RequestBody BasketForm form) { // 后续业务逻辑 }
内容的提问来源于stack exchange,提问作者DarkGalBi
相关产品推荐
相关产品推荐

