Codierung bei der Anbindung an eine REST API

ballibum

Aktives Mitglied
Hallo Forums-Experten,

ich habe ein Java-Programm geschrieben welches eine REST-API ansteuern soll. In den meisten Fällen klappt das auch prima, nur nicht sobald Sonderzeichen auftauchen. Das heißt ich generiere mir mit Java ein JSON und schicke das an die andere Software. Wenn ich das JSON mit JAVA schicke blockt die Zielsoftware in einigen Fällen das Objekt, schicke ich selbes Objekt über Postman (vorher ein einfach System.out.println()json.toString()), dann klappt es. Mein Zielprogramm, welches in PHP geschrieben ist gibt mir folgende Fehlermeldung aus:

Malformed UTF-8 characters, possibly incorrectly encoded

Mit folgendem Programmcode, schicke ich das JSON-Objekt ab:
Code:
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
            String url = (String) this.props.get("drupal_baseURL") + (String) this.props.get("drupal_post");
            HttpPost request = new HttpPost(url);
            StringEntity params = new StringEntity(json.toString());
            request.addHeader("Content-Type", "application/json; charset=UTF-8");
            request.addHeader("Accept", "application/json");
            request.addHeader("X-CSRF-Token", this.sessionToken);
            String encoding = Base64.getEncoder().encodeToString((this.props.get("drupal_user") + ":" + this.props.get("drupal_password")).getBytes());
            String authHeader = "Basic " + encoding;
            request.addHeader("Authorization", authHeader);
            request.setEntity(params);
           
            HttpResponse response = httpClient.execute(request);
            int code = response.getStatusLine().getStatusCode();
            System.out.println("Insert: " + code);

        } catch (Exception ex) {
            System.out.println(ex);
            System.out.println("MIST Insert");
        }

Habt ihr eine Idee, wie ich diesen Fehler genauer einschränke oder gar beheben kann?

besten Gruß
Balli
 

ballibum

Aktives Mitglied
Hi, ich habe die Authentifizierung einmal deaktiviert und kann nur sagen, dass der Fehler weiterhin besteht. Wenn ich bei den params (request.setEntity(params);) im Vorfeld alle Sonderzeichen entferne, dann klappt der Spaß wunderbar. Das ist natürlich nicht sind und Zweck der Geschichte. Letztendlich möchte ich eigentlich nur, dass auch die Sonderzeichen beim Zielprogramm ankommen.
Eigenartig ist eben, dass die Ausgabe von json.toString() über POSTMAN super funktioniert.


Wenn ich mir
System.out.println(request.getEntity());
ausgeben lasse, dann erhalte ich eigenartigerweise:
[Content-Type: text/plain; charset=ISO-8859-1,Content-Length: 330,Chunked: false]

obwohl ich im Header application/json; UTF-8 angegeben habe.
 

ballibum

Aktives Mitglied
Die Lösung scheint folgendes zu sein:

Java:
StringEntity params = new StringEntity(json.toString(), "application/json", "UTF-8");

Jetzt wird das new StringEntity in meiner Netbeans -Umgebung nur durchgestrichen angezeigt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Byte-Codierung bei Socket-Verbindung ändern Netzwerkprogrammierung 8
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
M OCI Anbindung Netzwerkprogrammierung 2
R Code-Konvertierung bei Socket-Anbindung Netzwerkprogrammierung 1
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
T Webserviceaufruf verursacht eine Exception Netzwerkprogrammierung 3
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
P Eine etwas andere Frage: Sicherheit Netzwerkprogrammierung 5
I Server schickt eine Nachricht an Broadcast Netzwerkprogrammierung 2
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
L ActiveMq - wie kann ich eine Queue löschen? Netzwerkprogrammierung 2
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
N eine klasse mit server & client Netzwerkprogrammierung 5
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
H Eine Mac-Adresse übers Internet ermitteln Netzwerkprogrammierung 2
V Alle Ip-Adressen eine Lokalen-Netzwerkes erfragen Netzwerkprogrammierung 9
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
T Tomcat zeigt immer nur eine Seite Netzwerkprogrammierung 3
Q Problem bei Vergleichen von Strings übertragen über eine Socketverbindung Netzwerkprogrammierung 3
E Wie erstelle ich eine blockiernde Funktion? Netzwerkprogrammierung 12
G binden auf eine bstimmte IP und Netzwerkinterface Netzwerkprogrammierung 12
G Warum eine java.net.ConnectException? Netzwerkprogrammierung 7
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
M Wie läd man eine HTML Seite in Java runter Netzwerkprogrammierung 2
A Anmeldung an eine Active Directory? Netzwerkprogrammierung 5
T Möglichkeit über das Netzwerk eine Funktion zu starten? Netzwerkprogrammierung 2
F String in eine URL umwandeln Netzwerkprogrammierung 7
M Wie empfange ich eine ftp liste? Netzwerkprogrammierung 12
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
R auf RemotPC eine Applikation starten Netzwerkprogrammierung 10
D Zwei Applikationen eine Liste? Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben