Json POST-REQUEST

Hallo,

ich soll an eine Schnittstelle (https URL) ein Json POST-METHODE absenden. Die Schnittstelle returned dann ein Json Objekt zurück, dass ich ausgeben lassen möchte.

Der Code unten gibt mir folgende Fehlermeldung:

Java:
{"error":true,"errortext":"field \u00b4json\u00b4 not found in post"}
Code:
Java:
package API;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

public class INSEL {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        String body = "bid=" + URLEncoder.encode( "333", "UTF-8" ) + "&" +
                  "getorder=" + URLEncoder.encode( "1", "UTF-8" );

    URL url = new URL( ".../index.php/" );
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod( "POST" );
    connection.setDoInput( true );
    connection.setDoOutput( true );
    connection.setUseCaches( false );
    connection.setRequestProperty( "Content-Type",
                                   "application/x-www-form-urlencoded" );
    connection.setRequestProperty( "Content-Length", String.valueOf(body.length()) );

    OutputStreamWriter writer = new OutputStreamWriter( connection.getOutputStream() );
    writer.write( body );
    writer.flush();


    BufferedReader reader = new BufferedReader(
                              new InputStreamReader(connection.getInputStream()) );

    for ( String line; (line = reader.readLine()) != null; )
    {
      System.out.println( line );
    }

    writer.close();
    reader.close();
   
    }

}
Bin um jede Hilfe dankbar!
 
Der Fehlermeldung nach erwartet die Schnittstelle im Body ein Feld namens "json", das gibts bei dir nicht.

Wenn das format mit "x-www-form-urlencoded" stimmt, erwartet das u.U. einfach ein Feld namens "json", dessen Inhalt der als JSON formatierte Payload ist.

Sinnvoller wäre aber vermutlich, das direkt als JSON zu schicken?
 
Der Fehlermeldung nach erwartet die Schnittstelle im Body ein Feld namens "json", das gibts bei dir nicht.

Wenn das format mit "x-www-form-urlencoded" stimmt, erwartet das u.U. einfach ein Feld namens "json", dessen Inhalt der als JSON formatierte Payload ist.

Sinnvoller wäre aber vermutlich, das direkt als JSON zu schicken?

Danke dir für deine Antwort.

Ich habe keine Ahnung von Json. Der Code stammt aus "Java ist auch eine Insel". Bin seit 2 Tagen am googlen und experimentiere mit Code Schnippseln rum, aber ich komm einfach nicht dahinter.

Hast du vielleicht eine gute Anleitung, oder irgendein Codeschnippsel, der passen würde, wenn ich ihn umändere?

Danke dir.
 
Verwende ein Tool wie curl oder postman, mit dem Du den Request erstmal testen kannst.

Zum Beispiel:
Code:
curl -H "Content-Type: application/x-www-form-urlencoded" -X POST -F 'json={"bid":333,"getorder":1}' http://...index.php

oder, wenn bid und getorder Formularfelder sein sollen, ggf. auch:

curl -H "Content-Type: application/x-www-form-urlencoded" -X POST -F 'json={}' -F 'bid=333' -F 'getorder=1' http://...index.php
 
Verwende ein Tool wie curl oder postman, mit dem Du den Request erstmal testen kannst.

Zum Beispiel:
Code:
curl -H "Content-Type: application/x-www-form-urlencoded" -X POST -F 'json={"bid":333,"getorder":1}' http://...index.php

oder, wenn bid und getorder Formularfelder sein sollen, ggf. auch:

curl -H "Content-Type: application/x-www-form-urlencoded" -X POST -F 'json={}' -F 'bid=333' -F 'getorder=1' http://...index.php

Hab ich gemacht. Bekomme wieder die selbe Fehlermeldung wie oben...
 
Nein sorry...

Die Schnittstelle erwartet ein Json Object und gibt dann eins zurück. Dieses enthält dann die Infos die ich brauche.
bid und getorders müssen quasi als Json an die Schnittstelle übergeben werden
 
Naja, dann probier mal
Code:
curl -H "Content-Type: application/json" -X POST -d '{"bid":333,"getorder":1}' http://...index.php

oder (weil die Fehlermeldung etwas seltsam ist)

curl -H "Content-Type: application/json" -X POST -d '{"json":{}}' http://...index.php
 
Es gibt keine Doku :rolleyes:
Es gibt:

1. Schnittstellenlink

2. Die Info, dass die Schnittstelle mit POST-request unter dem Key "json" abgesendete json-objekte entgegennimmt und ein json-objekt
zurückgibt.

3. Parameter bid und getorder/s

4. {"error":true,"errortext":"field \u00b4json\u00b4 not found in post"}


Das wars
 
Die Infos sind weder eindeutig noch ausreichend.

Du weißt nicht, was das JSON-Objekt enthalten soll (ein JSON-Objekt ist z. B. bereits durch {} gegeben). Du weißt nicht, wie das Key-Value-Paar kodiert werden soll (selbst in einem JSON-Objekt, als Formularfeld oder evtl. sogar als URL-Parameter, vielleicht aber auch ganz anders?!?) Du weißt nicht, wie die Parameter anzugeben sind (im JSON-Objekt, als Formularfelder, als URL-Parameter oder ganz anders?!?) Das ist ein einziges Ratespiel.

Deinem Eingangspost nach hat Dir ja irgendwer die Aufgabe gegeben. Der sollte dann doch auch die notwendigen Infos dazu haben. Du kannst Dich natürlich auch hinsetzen und alles mögliche durchprobieren. Effizient ist das aber nicht :)
 
Sry war gestern etwas spät geworden.

getorder returned:

Java:
int; Orderid; Liefert Details zur Bestellung
return:
{ "Bestellnummer":"Bestellnummer",
"Besteller":"BestellerID", "Zeit":"YYYY-MM-DD HH:MM:SS", "Artikel":
{"Artikel1": {"Artikelnummer":"Artikelnummer","Anzahl":"be-
stellte Anzahl","Preis":"Preis pro Stück"}, "Artikel2":
{"Artikelnummer":"Artikelnummer","Anzahl":"be- stellte Anzahl","Preis":"Preis pro Stück"}
} }
und getorders
Java:
int; liefert alle Bestellnummern mit neuerem Datum seit dem Datum der Bestellung, deren Bestellnummer übergeben wurde zurück; für die alle Bestellungen „0“ als Referenzbestellung verwenden
return: {"Bestellnummern":["Bestellnr1","Bestellnr2"]}
und bid muss immer mit angegeben werden. (BenutzerID)
 
Zuletzt bearbeitet:
Hab auch versucht in die URL die parameter mit nem führenden „?“ einzufügen, also GET
Kommt die selbe Fehlermeldung.
Ich hab das so verstanden, dass ich die richtigen Parameter als Json Objekt übergeben soll. Wenn die Parameter angenommen werden, liefert es mir die return Ausgabe zurück.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben