Codierung bei der Anbindung an eine REST API

Diskutiere Codierung bei der Anbindung an eine REST API im Netzwerkprogrammierung Bereich.
B

ballibum

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
 
B

ballibum

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

ballibum

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

Codierung bei der Anbindung an eine REST API

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben