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

如何在jQuery DataTable中通过HTTP请求传参至Spring Boot控制器

没问题,咱们把请求改成POST方式,把参数放到HTTP请求体里,这样就不会暴露在URL中啦。下面分前端和后端两部分来修改:


1. 前端jQuery DataTable代码修改

把原来的GET请求改成POST,同时将参数封装到JSON请求体中,还要适配DataTable的分页/排序参数(如果需要的话):

$("button#search").click(function() { 
    var name = $("#name").val(); 
    var age = $("#age").val(); 
    $('#customerTable').DataTable({ 
        "type": "POST", // 切换为POST请求
        "ajax": {
            "url": "/searchCustomer/search",
            "contentType": "application/json", // 告诉服务器请求体是JSON格式
            "data": function(d) {
                // 封装自定义查询参数 + DataTable自带的分页/排序参数
                return JSON.stringify({
                    name: name,
                    age: age,
                    start: d.start, // 分页起始位置
                    length: d.length, // 每页条数
                    searchValue: d.search.value // 全局搜索关键词
                });
            },
            "dataSrc": "data" // 指定从返回JSON的data字段取表格数据
        },
        "cache": false, 
        "bDestroy":true, 
        "aLengthMenu": [20, 50, 70, 100], 
        "columns":[ 
            {"data": "customerid" }, 
            {"data": "name"}, 
            {"data": "mobilenumber"}, 
            {"data": "status"}, 
        ], 
        "language": { 
            "lengthMenu": "| View _MENU_ records per page", 
            "zeroRecords": "No matching records found", 
            "infoEmpty": "No records available", 
            "infoFiltered": "(filtered from _MAX_ total records)" 
        }, 
        "pagingType": "full_numbers", 
    }); 
});

2. 后端Spring Boot控制器修改

首先创建一个DTO类来接收请求体中的JSON参数(比零散接收更规范),然后修改控制器方法为POST类型,用@RequestBody绑定参数:

第一步:创建请求DTO类

public class CustomerSearchRequest {
    private String name;
    private String age;
    // 如果需要处理分页,保留以下字段;不需要的话可以删掉
    private int start;
    private int length;
    private String searchValue;

    // 所有字段的getter和setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getAge() { return age; }
    public void setAge(String age) { this.age = age; }
    public int getStart() { return start; }
    public void setStart(int start) { this.start = start; }
    public int getLength() { return length; }
    public void setLength(int length) { this.length = length; }
    public String getSearchValue() { return searchValue; }
    public void setSearchValue(String searchValue) { this.searchValue = searchValue; }
}

第二步:修改控制器方法

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

// 替换原来的GET请求为POST
@PostMapping(value = "/searchCustomer/search") 
public @ResponseBody JSONObject getCustomers(@RequestBody CustomerSearchRequest request) { 
    List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>(); 
    JSONObject ajson = new JSONObject(); 
    
    // 从request对象中获取参数
    String queryName = request.getName();
    String queryAge = request.getAge();
    // 如果处理分页,还可以取request.getStart()、request.getLength()等
    
    // 你的业务逻辑写在这里
    // list1.add(yourDataMap); 
    
    ajson.put("data", list1);
    return ajson; // 修复了原代码中return json的笔误
}

关键改动说明

  1. 前端:

    • 切换请求方式为POST,符合HTTP规范(GET不建议携带请求体)
    • 通过contentType: "application/json"声明请求体格式,确保后端能正确解析
    • 用JSON.stringify()将参数转为JSON字符串,避免参数暴露在URL中
    • 保留DataTable的分页参数,方便后端做分页查询(不需要的话可以简化)
  2. 后端:

    • 用@PostMapping替代原有的GET映射
    • 用@RequestBody绑定请求体中的JSON到DTO对象,比@RequestParam更安全、更易维护
    • 修复了原代码中return json的笔误(应该返回ajson)

内容的提问来源于stack exchange,提问作者Naresh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:35:05