2

我正在为 iPhone 构建一个链接到Delphi XE2 DataSnap REST server的应用程序。

最初我是在 Embarcadero 的移动连接器的帮助下编写 iOS 前端的,但是由于许多错误,我不得不在 asihttprequest 的帮助下编写自己的链接。

虽然我可以让系统处理 JSON 请求并传递一两个参数(使用 URL),例如:-

NSURL *theURL = [NSURL URLWithString:@"http://192.168.1.2:8080/datasnap/rest/tservermethods1/SaveMileage/type1/100];
request = [ASIHTTPRequest requestWithURL:theURL];

(其中服务器方法为SaveMileage,两个参数值为type1和100)

但是,如果我想添加更复杂的参数,我需要使用 appendPostData 来使用 JSON 发布参数:-

[request appendPostData:jsonMutData];

下面是 jsonMutData 的输出: -

{
  "client_ref" : "ABC100",
  "mileage_type" : "Fee Work",
  "mileage_description" : "test",
  "mileage_id" : "0",
  "mileage_date" : "03\/15\/2012"
}

但是,当我通过应用程序将其发布到我的服务器时,我收到以下响应,并且调用不是由 DataSnap 服务器处理的:-

{"error":"**Cannot convert JSON value** {\"client_ref\":\"ABC100",\"mileage_type\":\"Fee Work\",\"mileage_description\":\"test\",\"mileage_id\":\"\",\"mileage_date\":\"03\/15\/2012\"} input into TDBXTypes.WideString"}

下面是 DataSnap 函数的结构: -

function TServerMethods1.updateSaveMileage(mileage_id: string; 
client_ref: string; mileage_date: String; mileage_type: string; 
mileagefigure: string; description: string; notepad: string): string;

关于如何解决这个问题的任何想法?

4

1 回答 1

1

我知道这个问题有点老了,但我遇到了同样的问题,我也找不到答案。

幸运的是,几个小时后,我终于想出了如何解决这个问题。

您需要做的就是修改您的函数以接受 TJSONObject,如下所示:

function TServerMethods1.UpdateMethod(AJSONObject: TJSONObject): TJSONObject;
var
  JSONText: string;
begin

  JSONText := AJSONObject.ToJSON;

  // code...

end;

在 Delphi 10.1 Berlin 上测试。

于 2018-10-19T19:18:08.910 回答