![]() |
Rest Json Fehler 415 unsopported Media Type
Hallo,
ich arbeite mich gerade ein wenig ein in Rest / Json. Konkret geht es um den Datenaustausch zu einem Gambio Shop. Ich kann problemlos mit TRestClient, TRestRequest, TRestResponse und THTTP BasichAuthenticator daten downloaden (z.B. Produkte aus dem Webshop). Wenn ich jetzt aber z.B. den Preis ändern möchte, kommt die Fehlermeldung: 415 unsupported Media Type Mein Code:
Delphi-Quellcode:
Ist mit den Parametern das so OK?Request.ResetToDefaults; Request.Method := rmPUT; Request.Resource := 'api.php/v2/product_prices/{product_id}'; Request.Addparameter( 'product_id','7' ); Request.Addparameter( 'price','10' ); Request.Execute; ich habe was beim googeln gefunden evtl mit. zusätzlichen Parametern im header? Bin auf dem Gebiet leider totaler newbie |
AW: Rest Json Fehler 415 unsopported Media Type
Zunächst fehlt dir die Authorization und einen Body solltest Du auch mitschicken. Wenn es sich um eine Neuentwicklung handelt, solltest Du auch wohl besser die neueste API Version verwenden (V3 statt V2).
Die Definition wie der Request und insbesondere der Body auszusehen hat, steht ![]() |
AW: Rest Json Fehler 415 unsopported Media Type
Danke für die schnelle Antwort.
Die Authentizierung klappt, habe ich in der Client-Komponente eingebenen mit Authenticator-Komponente verknüpft. Ohne Authentifzierung käme 401 unauthorized. Die Gambio - Dokumentation habe ich. Die übrigen Parameter muss ich doch nicht übergeben/belegen oder? Es reicht doch die Produkt-ID und der Preis? Was meinst du genau mit ich muß einen Body-übergeben? |
AW: Rest Json Fehler 415 unsopported Media Type
415 kommt weil du einen ungültigen Query Parameter "price" übergibst. Die Preisdaten sollen aber im Body des Request stehen. Im o.a. Link siehst Du, wie dieses JSON auszusehen hat (gxproductprices-Struktur).
|
AW: Rest Json Fehler 415 unsopported Media Type
Die Product ID gehört ja in die URL. Das gibt man bei AddParameter an:
Delphi-Quellcode:
Für den Body solltest du ein passendes Objekt als JSON übergeben:Request.Addparameter('product_id', '7', TRESTRequestParameterKind.pkURLSEGMENT);
Delphi-Quellcode:
type
{ unvollständige Klasse ohne richtigen Support für GroupPrices und GraduatedPrices. Erweiterung als Übung :) } TUpdateProductPrices = class type TGroupPrice = class type TGraduatedPrice = class FGraduatedPrice: Double; FThreshold: Double; end; private FCustomerGroupId: Integer; FGraduatedPrices: TArray<TGraduatedPrice>; FGroupPrice: Double; end; private FGroupPrices: TArray<TGroupPrice>; FPrice: Double; public property Price: Double read FPrice write FPrice; end; ... instance := TUpdateProductPrices.Create; try instance.Price := 10; Request.AddBody<TUpdateProductPrices>(instance); // hier wird das JSON intern zusammengebaut finally instance.Free; end; |
AW: Rest Json Fehler 415 unsopported Media Type
Geht das mit addbody evtl. auch ohne Klassen zu erstellen?
|
AW: Rest Json Fehler 415 unsopported Media Type
Zitat:
|
AW: Rest Json Fehler 415 unsopported Media Type
Danke für Eure Tips, ich stand echt im Wald ;-)
Ich habs dann jetzt so gemacht:
Delphi-Quellcode:
procedure TFRest.BtnSetPreisClick(Sender: TObject); var obj : TJsonObject; objGroupPrices : TJsonArray; begin Req.ResetToDefaults; Req.Method := rmPUT; Req.Resource := 'api.php/v2/product_prices/{product_id}'; EditResource.editvalue := req.Resource; Req.Addparameter('product_id', '7', TRESTRequestParameterKind.pkURLSEGMENT); Obj := TJSONObject.Create; ObjGroupPrices := TJSonArray.Create; obj.AddPair('groupPrices',objGroupPrices); obj.Addpair('price' ,TJsonNumber.create(10)); memo1.clear; memo1.Lines.Add(obj.toJson); req.addbody(obj); objGroupPrices.free; Req.Execute; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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