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

如何通过AJAX将JSON格式DataTable数据传递到Java MVC控制器

问题解决方案

问题根源

前端调用tableToJSON生成的是对象数组,直接作为data传入$.ajax时,jQuery会将其转换为application/x-www-form-urlencoded格式的表单参数,复杂嵌套结构无法被后端@RequestParam注解正确解析;直接调用toString()只会将JS对象转为[object Object]字符串,无法传递有效数据。

前端修改方案

将请求参数整体序列化为JSON字符串,声明请求体格式为JSON:

$(document).ready(function(){
    $('#mov').click(function(){
        var dni = parseInt($('#dni').val());
        var table = $('#tablaSeleccionados').tableToJSON();
        // 封装参数并序列化为JSON字符串
        var requestData = JSON.stringify({
            dni: dni,
            table: table
        });
        $.ajax({
            type:'POST',                
            url:'${pageContext.request.contextPath}/saveMovBienes',
            data: requestData,
            contentType: 'application/json;charset=utf-8', // 声明请求体为JSON格式
            dataType: "json" // 若后端返回空字符串可改为"text"避免解析报错             
        })
    })
})

后端修改方案

用@RequestBody注解接收整个JSON请求体,可选两种实现方式:

方案1:新建DTO类接收(更规范)

首先新增请求参数映射类:

import java.util.List;
import java.util.Map;
// 没有Lombok就自行添加getter、setter方法
import lombok.Data;

@Data
public class MovBienesRequest {
    private Integer dni;
    // 若已知table的字段结构,可将Map替换为对应实体类
    private List<Map<String, Object>> table;
}

修改Controller代码:

@PostMapping("/saveMovBienes")
public String saveMovBienes(@RequestBody MovBienesRequest request) {
    Integer dni = request.getDni();
    List<Map<String, Object>> listado = request.getTable();
    
    System.out.println("PER_ID= "+dni);
    System.out.println("LIST= "+ listado);
    
    return "";
}

方案2:用Map直接接收(无需新建类)

@PostMapping("/saveMovBienes")
public String saveMovBienes(@RequestBody Map<String, Object> params) {
    Integer dni = (Integer) params.get("dni");
    List<Map<String, Object>> listado = (List<Map<String, Object>>) params.get("table");
    
    System.out.println("PER_ID= "+dni);
    System.out.println("LIST= "+ listado);
    
    return "";
}

验证注意事项

  • 确认Spring项目已引入jackson-databind依赖(Spring Boot web起步依赖默认已包含),用于解析JSON请求体
  • 可通过浏览器开发者工具的Network面板查看请求的Request Payload,确认传输的JSON格式正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:06:00