如何在Spring Rest API控制器中接收AJAX请求传递的参数(员工编辑删除场景)
实现方案
第一步:修复前端代码问题
JSP修改点
- 复选框需要绑定员工ID作为值,否则收集的选中数据无实际业务含义
- 按钮点击事件直接传递操作类型,避免无效的按钮点击状态判断
修改后的JSP核心代码:
<h1 align="center">My Employees</h1> <table border="1" cellpadding="10"> <tr> <th></th> <th>Employee Number</th> <th>Name</th> <th>Address</th> <th>Phone Number</th> </tr> <c:forEach items="${emp}" var="emp"> <tr> <td><input type="checkbox" name="check" value="${emp.id}"/></td> <td>${emp.id }</td> <td>${emp.name }</td> <td>${emp.address }</td> <td>${emp.phoneNo }</td> </tr> </c:forEach> </table> <button onclick="submit('delete')" id="deleteButton" value="delete">Delete</button> <button onclick="submit('edit')" id="editButton" value="edit">Edit</button>
JS修改点
- 移除无效的按钮点击状态判断逻辑,直接接收事件传入的操作类型
- 发送JSON请求前需要将JS对象序列化为JSON字符串,适配
application/json类型的请求头
修改后的JS代码:
function submit(buttonType){ var check = document.getElementsByName('check'); var selected = new Array(); for (var i=0; i<check.length; i++) { if (check[i].checked) { selected.push(check[i].value); } } // 可选:加选中校验,未选员工时阻止请求 if(selected.length === 0) { alert("请先选择要操作的员工"); return; } $.ajax({ url:"/submit", type:"POST", contentType: "application/json", dataType:'json', data: JSON.stringify({selected:selected,button:buttonType}), success:function(data){ alert("操作成功"); }, error:function() { alert("操作失败,请重试"); } }); }
第二步:后端Spring接口实现
1. 定义请求参数接收DTO
创建一个普通Java类作为请求参数载体,字段名要和前端传的JSON键名完全一致:
// 若使用Lombok可直接加@Data注解,省略getter/setter public class EmployeeOperateDTO { private List<String> selected; private String button; // getter public List<String> getSelected() { return selected; } public String getButton() { return button; } // setter public void setSelected(List<String> selected) { this.selected = selected; } public void setButton(String button) { this.button = button; } }
2. 编写Controller接口
使用@RequestBody注解接收JSON格式的请求参数:
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class EmployeeController { @PostMapping("/submit") public String handleEmployeeOperate(@RequestBody EmployeeOperateDTO dto) { // 获取参数 List<String> selectedEmpIds = dto.getSelected(); String operateType = dto.getButton(); // 业务逻辑处理 if("delete".equals(operateType)) { // 执行批量删除逻辑 } else if("edit".equals(operateType)) { // 执行编辑逻辑 } return "操作成功"; } }
可选简化方案
如果不想单独创建DTO类,也可以直接用Map接收参数,适合快速调试场景:
@PostMapping("/submit") public String handleEmployeeOperate(@RequestBody Map<String, Object> params) { List<String> selectedEmpIds = (List<String>) params.get("selected"); String operateType = (String) params.get("button"); // 后续逻辑同上 }
内容的提问来源于stack exchange,提问作者Samanyu Mehra
相关产品推荐
相关产品推荐

