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
相关产品推荐
相关产品推荐

