【问题标题】:Delphi TRestRequest array parameterDelphi TRESTRequest 数组参数
【发布时间】:2014-07-29 18:18:42
【问题描述】:

这可能是一个简单的。

我正在通过 Delphi XE6 使用 RestClient 组件访问 RESTFul 服务:TRestClient、TrestRequest、TrestResponse 和 THTTPBasicAuthenticator。

该服务需要我添加没有问题的参数:

RestReq.Params.AddItem('param1', 'value1');
RestReq.Params.AddItem('param2', 'value2');

上面的代码在服务器端看起来像:

{
  "param1":"value1",
  "param2":"value2"
}

但是,当我需要发送一个数组参数时,我会尝试:

RestReq.Params.AddItem('param1', 'value1');
RestReq.Params.AddItem('param2', 'value2');
RestReq.Params.AddItem('param3', '[v1, v2, v3]');

服务将拒绝它,因为第三个参数不是预期的数组。这是正确的,因为它收到:

{
  "param1":"value1",
  "param2":"value2",
  "param3":"[v1,v2,v3]"
}

我知道它看起来很简单。已切换 RestClient.ContentType,已尝试操作数组。试过改参数ContentType、Options,猜解不是我喜欢玩的游戏。 所以问题是:使用 RestClient 组件¿如何使用以下参数调用我的服务?

{
  "param1":"value1",
  "param2":"value2",
  "param3":[
    "v1",
    "v2",
    "v3"
  ]
}

提前感谢您的宝贵时间。

【问题讨论】:

  • 我完全不了解 REST 或 JSON,所以只能发表评论,但您是否尝试过:RestReq.Params.AddItem('["v1", "v2", v3"]');?这是我会尝试的第一件事。
  • 是的,服务器收到:
  • "[\"v1",\"v2",\"v3"]".
  • 嗯...好的。我没有更好的主意,抱歉。
  • 如果将参数的Options 设置为poDoNotEncode 会怎样?

标签: arrays json delphi rest


【解决方案1】:

完成!看起来我做错了(或复杂)的方式。该服务需要一个 JSON 对象,而我正在逐个属性地构建它。有一个更简单的方法:

var aParam: TRESTRequestParameter;
begin
  RestReq.Method := rmPOST; {or rmGET, ...}
  aParam := RestReq.Params.AddItem(); //don't care about setting a name for it
  aParam.Value := TJSONObject.ParseJSONValue('{"param1":"value1","param2":"value2","param3":["v1","v2","v3"]}');
  aParam.ContentType := ctAPPLICATION_JSON;
  //set proxy params, resource, etc.
  RestClient.Execute();
end;

这样就可以了!谢谢大家的cmets。

【讨论】:

  • 在我使用 XE7 的情况下,我必须编写 aParam.Value := '{"param1":"value1","param2":"value2","param3":["v1","v2 ","v3"]}';
  • 在东京 10.2 的例子中,我使用了 aParam.Value := TJSONObject.ParseJSONValue('{"a":"b"}').ToJSON;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多