You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Rest API控制器中接收AJAX请求传递的参数(员工编辑删除场景)

实现方案

第一步:修复前端代码问题

JSP修改点

  1. 复选框需要绑定员工ID作为值,否则收集的选中数据无实际业务含义
  2. 按钮点击事件直接传递操作类型,避免无效的按钮点击状态判断
    修改后的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修改点

  1. 移除无效的按钮点击状态判断逻辑,直接接收事件传入的操作类型
  2. 发送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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:36:02