![]() |
TREST* Daten im Body übergeben
Hallo,
bisher habe ich erfolgreich mit den Komponenten "TRESTClient", "TRESTRequest" und "TRESTResponse" eine Restabfrage implementieren können. Ebenfalls eine Übermittlung von Nutzdaten, allerdings waren da alle Daten per "TRESTClient.Params.AddItem('data', s);" hinzugefügt. Nun soll ich Nutzdaten versenden die alle im Body stehen. Aber wenn ich die Daten versende, bekomme ich immer einen Fehler "Modul: REST-Anforderung fehlgeschlagen: Execution of request terminated with unknown error". Die Komponenten:
Delphi-Quellcode:
Der Code (das ganze dient mir erst mal dazu mit fest codierten Werten überhaupt einen Datensatz übermitteln zu können, um das Prinzip zu verstehen):
object RESTClientMUCjson: TRESTClient
Accept = 'application/json, text/plain; q=0.9, text/html;q=0.8,' AcceptCharset = 'UTF-8, *;q=0.8' Params = <> HandleRedirects = True OnHTTPProtocolError = RESTClientMUCjsonHTTPProtocolError Left = 48 Top = 320 end object RESTRequestMUCjson: TRESTRequest Client = RESTClientMUCjson Method = rmPOST Params = < item end> Response = RESTResponseMUCjson OnAfterExecute = RESTRequestMUCjsonAfterExecute SynchronizedEvents = False OnHTTPProtocolError = RESTRequestMUCjsonHTTPProtocolError Left = 120 Top = 344 end object RESTResponseMUCjson: TRESTResponse ContentType = 'application/json' Left = 200 Top = 320 end
Delphi-Quellcode:
ergibt dann im Fehlerprotokoll:
function AddBodyStr(const aKey, aValue : string) : string;
{ Füge aKey, aValue dem Body hinzu Beispiel: rotationId=143982 Das Funktionsergebnis liefert einen String mit einem "/" am Ende, so kann man aus dem Funktionsergbnis einen lesbaren Gesamtstring aller Bodies fürs loggen zusammen bauen. } begin Result := ''; if aValue <> '' then begin Result := Format('%s=%s', [aKey, aValue]); RESTRequestMUCjson.AddBody(Result, ctAPPLICATION_JSON); Result := Result + '/'; end; end; rotationId := '143982'; orderId := ''; cleaningBegin := '2016-10-10T14:25:00.000+02:00'; cleaningEnd := '2016-10-10T14:55:00.000+02:00'; cleanerOnPosition := '2016-10-10T14:30:00.000+02:00'; orderType := 'QuickCleaning'; teamType := 'Maier'; specialInformation := 'Spezial'; RESTClientMUCjson.BaseURL := Format(edtBaseURL.Text, [rotationId]); Body := ''; Body := Body + AddBodyStr('rotationId', rotationId); Body := Body + AddBodyStr('orderId', orderId); Body := Body + AddBodyStr('cleaningBegin', cleaningBegin); Body := Body + AddBodyStr('cleaningEnd', cleaningEnd); Body := Body + AddBodyStr('cleanerOnPosition', cleanerOnPosition); Body := Body + AddBodyStr('orderType', orderType); Body := Body + AddBodyStr('teamType', teamType); Body := Body + AddBodyStr('specialInformation', specialInformation); AddResults(RESTClientMUCjson.BaseURL); // protokolliere die BaseURL AddResults(Body); // protokolliere die einzelnen Nutzdaten try RESTRequestMUCjson.Execute; [10.10.2016 13:26:59,561] ![]() [10.10.2016 13:26:59,561] rotationId=143982/cleaningBegin=2016-10-10T14:25:00.000+02:00/cleaningEnd=2016-10-10T14:55:00.000+02:00/cleanerOnPosition=2016-10-10T14:30:00.000+02:00/orderType=QuickCleaning/teamType=Maier/specialInformation=Spezial/ [10.10.2016 13:31:47,912] Error: @@@ Modul: REST-Anforderung fehlgeschlagen: Execution of request terminated with unknown error Wo liegt hier nun der Denkfehler? a) ist "Method = rmPOST" OK? b) ist das zusammen basteln des Body so OK? c) ist das "ctAPPLICATION_JSON" im "AddBody" so OK? d) in der Doku die uns zur Verfügung steht wird der Wert für "rotationId" als "integer" angegeben. Blöde frage, wie übergebe ich denn in diesem Fall explizit einen Integer? Letztlich kann ich doch ausschlielich strings übergeben. Vielen Dank im Voraus. Gruß, Markus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz