gpt4 book ai didi

Delphi datasnap RESTful URL如果包含带有字符T/F/Y/N的参数将转换为 bool 值True和False

转载 作者:行者123 更新时间:2023-12-03 15:25:34 24 4
gpt4 key购买 nike

我有一个服务器方法“CustomerLookup”,它接受字符串参数“CompanyName”,用户可以输入任何字符,CustomerLookup 方法将返回部分匹配条件的客户列表。我的 REST URL 如下所示,最后一个单词“t”是方法的参数

http://localhost/datasnap/rest/TSales_SM/CustomerLookup/t

我的预期结果是,如果用户输入“t”,方法将返回部分匹配“t”的所有客户的公司名称。但我发现对于某些字符,如 T & Y 将转换为 True,N & F 将转换为 false。转换代码在delphi单元->DataSnap.DSService

中实现
procedure TDSRESTService.BuildParamArray(const Params: TStringList; var ParamArray: TJSONArray);
var
I: Integer;
S: String;
LValue: Double;
begin
ParamArray := TJSONArray.Create;
for I := 0 to Params.Count - 1 do
begin
S := Params[I];
if (AnsiIndexText(S,TrueBoolStrs) > -1) then
ParamArray.AddElement(TJSONTrue.Create)
else if AnsiIndexText(S,FalseBoolStrs) > -1 then
ParamArray.AddElement(TJSONFalse.Create)
else if AnsiCompareStr(S,NULL) = 0 then
ParamArray.AddElement(TJSONNull.Create)
else
if TDBXPlatform.TryJsonToFloat(S, LValue) then
ParamArray.AddElement(TJSONNumber.Create(S))
else
ParamArray.AddElement(TJSONString.Create(S));
end;
end;

谁能告诉我如何防止系统将T、F、Y、N转换为真假

谢谢。

最佳答案

我认为您的代码中一定有一些地方定义了类似的内容:

SetLength(TrueBoolStrs, 4);
TrueBoolStrs[0] := 'True';
TrueBoolStrs[1] := 'T';
TrueBoolStrs[2] := 'Yes';
TrueBoolStrs[3] := 'Y';

SetLength(FalseBoolStrs, 4);
FalseBoolStrs[0] := 'False';
FalseBoolStrs[1] := 'F';
FalseBoolStrs[2] := 'No';
FalseBoolStrs[3] := 'N';

解决方案是将 TDSRestService.BuildParamArray 修补为:

procedure TDSRESTService.BuildParamArrayPatch(const Params: TStringList;
var ParamArray: TJSONArray);
const NULL = 'null';
var
I: Integer;
S: String;
LValue: Double;
begin
ParamArray := TJSONArray.Create;
for I := 0 to Params.Count - 1 do
begin
S := Params[I];
if SameText(S, 'true') then
ParamArray.AddElement(TJSONTrue.Create)
else if SameText(S, 'false') then
ParamArray.AddElement(TJSONFalse.Create)
else if AnsiCompareStr(S, NULL) = 0 then
ParamArray.AddElement(TJSONNull.Create)
else if TDBXPlatform.TryJsonToFloat(S, LValue) then
ParamArray.AddElement(TJSONNumber.Create(S))
else
ParamArray.AddElement(TJSONString.Create(S));
end;
end;

关于Delphi datasnap RESTful URL如果包含带有字符T/F/Y/N的参数将转换为 bool 值True和False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12404105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com