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

Delphi 11 RESTClient POST请求报400(JSON语法错误4)求助

Delphi 11 RESTClient 发送JSON请求体解决400错误方案

核心配置检查

  • 必须把Content-Type设为application/json; charset=utf-8,部分服务器对字符集要求严格,只写application/json可能触发语法错误
  • JWT令牌要带Bearer 前缀,格式是Bearer <你的令牌内容>,别漏了前缀
  • 确认RESTRequest的Method是rmPOST,Body.ContentType设为ctAPPLICATION_JSON

用TJsonObject构建请求体的正确代码

var
  JsonObj: TJsonObject;
begin
  RESTClient.BaseURL := '你的服务器接口地址';
  RESTRequest.Method := rmPOST;
  RESTRequest.Params.Clear;
  
  // 设置认证头
  RESTRequest.Params.AddHeader('Authorization', 'Bearer ' + 你的JWT令牌);
  
  // 构建JSON对象
  JsonObj := TJsonObject.Create;
  try
    // 添加参数,值如果是数字可以用重载方法,比如AddPair('age', TJsonNumber.Create(25))
    JsonObj.AddPair('param1', 'value1');
    JsonObj.AddPair('param2', 'value2');
    // 把JSON对象绑定到请求体,自动处理UTF-8编码
    RESTRequest.Body.SetBody(JsonObj, ctAPPLICATION_JSON);
    
    RESTRequest.Execute;
    ShowMessage(RESTResponse.Content);
  finally
    JsonObj.Free;
  end;
end;

直接用JSON字符串的正确写法

注意Delphi里字符串的双引号要转义,确保JSON格式完全标准:

var
  JsonStr: string;
begin
  RESTClient.BaseURL := '你的服务器接口地址';
  RESTRequest.Method := rmPOST;
  RESTRequest.Params.Clear;
  
  RESTRequest.Params.AddHeader('Authorization', 'Bearer ' + 你的JWT令牌);
  
  // 构造标准JSON字符串,双引号用两个双引号转义
  JsonStr := '{"param1":"value1","param2":"value2"}';
  // 指定UTF-8编码设置请求体
  RESTRequest.Body.SetBody(JsonStr, ctAPPLICATION_JSON, TEncoding.UTF8);
  
  RESTRequest.Execute;
  ShowMessage(RESTResponse.Content);
end;

额外排查技巧

  • 如果参数值包含特殊字符(比如引号、换行),用TJson.StringEncode转义:
    JsonObj.AddPair('content', TJson.StringEncode('带"双引号"的内容'));
    
  • 开启RESTClient日志,查看实际发送的请求内容,确认是否是JSON格式问题:
    RESTClient.Logging := True;
    RESTClient.LogFile := 'C:\rest_request_log.txt';
    
    日志里会记录完整的请求头和请求体,能直接定位语法错误点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:07:37