这可能很简单。
我正在使用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"
]
}
提前,谢谢你的时间。
答案 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;
那就行了!谢谢大家的意见。