Delphi TRestRequest数组参数

时间:2014-07-29 18:18:43

标签: arrays json delphi rest

这可能很简单。

我正在使用RestClient组件访问Delphi XE6的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"
  ]
}

提前,谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

完成!看起来我做错了(或复杂)的方式。该服务期待一个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;

那就行了!谢谢大家的意见。