Delphi datasnap RESTful URL如果包含带字符T / F / Y / N的参数
发布时间:2020-12-15 09:25:16 所属栏目:大数据 来源:网络整理
导读:我有一个接受字符串参数“CompanyName”的服务器方法“CustomerLookup”,用户可以输入任何字符,CustomerLookup方法将返回部分符合条件的客户列表.我的REST URL如下所示,最后一个单词“t”是方法的参数 http://localhost/datasnap/rest/TSales_SM/CustomerLoo
我有一个接受字符串参数“CompanyName”的服务器方法“CustomerLookup”,用户可以输入任何字符,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转换为true和false 谢谢. 解决方法
我认为你的代码中必须有一些定义如下:
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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |