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
 
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.
 
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.
 

Zurück
Oben