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

Spring控制器接收JQuery Ajax JSON数组报400错误求助

解决方案:Spring接收JQuery Ajax传递的JSON数组报400 Bad Request

核心问题分析

400错误的本质是请求格式与后端期望不匹配:前端没有正确发送JSON格式的请求体,或者后端没有配置正确的解析规则。你遇到的仅String类型能接收但内容是URL编码表单格式的情况,说明JQuery默认用了表单编码方式提交,而非纯JSON。

步骤1:修正前端JQuery Ajax配置

必须明确指定请求内容类型为application/json,并将数组转为JSON字符串发送:

// 示例JSON数组数据
var paymentData = [
    {paymentId: "P001", amount: 150.50},
    {paymentId: "P002", amount: 200.00}
];

$.ajax({
    url: "/your-controller-path",
    method: "POST",
    contentType: "application/json;charset=utf-8", // 关键:指定JSON类型
    data: JSON.stringify(paymentData), // 把数组转为标准JSON字符串
    success: function(res) {
        console.log("处理成功:", res);
    },
    error: function(xhr) {
        console.error("请求失败:", xhr.status);
    }
});

步骤2:后端控制器正确配置参数

使用@RequestBody注解告诉Spring从请求体中解析JSON,直接绑定到List<PaymentDTO>:

@RestController
@RequestMapping("/payments")
public class PaymentController {

    // 接收JSON数组,必须加@RequestBody
    @PostMapping("/batch")
    public String receiveBatchPayments(@RequestBody List<PaymentDTO> paymentList) {
        // 业务处理逻辑
        return "成功接收" + paymentList.size() + "条支付数据";
    }
}

步骤3:确保PaymentDTO符合JavaBean规范

DTO类需要提供无参构造器、字段的getter/setter,且字段名要和前端JSON的键名一致(大小写敏感):

import java.math.BigDecimal;

public class PaymentDTO {
    private String paymentId;
    private BigDecimal amount;

    // 无参构造器:Jackson解析JSON必须
    public PaymentDTO() {}

    // getter和setter方法
    public String getPaymentId() {
        return paymentId;
    }

    public void setPaymentId(String paymentId) {
        this.paymentId = paymentId;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }
}

额外排查点

  • Jackson版本兼容性:Spring 5.3.9默认依赖Jackson 2.12.x系列,你使用的2.17.1版本虽兼容,但需确保jackson-core、jackson-databind、jackson-annotations三个包版本完全一致,避免依赖冲突。
  • JSON格式合法性:检查前端发送的JSON是否有语法错误(比如多余逗号、引号不闭合),可通过浏览器开发者工具的Network面板查看请求体内容。
  • 避免表单编码自动转换:如果未设置contentType,JQuery会自动将数据转为application/x-www-form-urlencoded格式,导致后端无法解析JSON数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:33:20