加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读