Whitespace im Java9 HTTPClient

TheSkyRider

Mitglied
Hallo liebe Community,

ich verwende derzeit den Java9 HTTP Client, um einen Query an die GEOApify API zu senden
um Straßennamen abzufragen.

Das Problem ist, dass wenn im Suchbegriff ein Leerzeichen sich befindet, er mir folgende Exception wirft:
Java:
Illegal character in query at index 62: https://api.geoapify.com/v1/geocode/autocomplete?text=berliner straße....

Mein HTTP Client Code sieht folgendermaßen aus:
Code:
HttpRequest request = HttpRequest.newBuilder()
                        .uri(URI.create("https://api.geoapify.com/v1/geocode/autocomplete?text=" + search + "&lang=de&..."))
                        .header("Content-Type", "application/json;charset=UTF-8")
                        .build();

                try {
                    HttpResponse<String> response = client.send(request, BodyHandlers.ofString());

                    JSONObject jsonObj = new JSONObject(response.body());
                    JSONArray arrObj = jsonObj.optJSONArray("results");
...


Ich habe den Link jeweils immer gekürzt weil er sonst sehr lang wäre und mein API-Schlüssel zu sehen wäre.

Leider findet man im Internet nicht sehr viel über diesen Client und ich habe auch schon Versucht den HTTPRequest über den Header
mit UTF-8 zu kodieren aber leider bringt das nichts.

Vielleicht kennt sich jemand mit diesem Client aus

Wie immer Danke im Voraus
 

TheSkyRider

Mitglied
Hallo Konrad,
danke für die Antwort.
In diesem Falle bleibt es mir ja nur übrig den whitespace mit &20 zu ersetzen.

Ich habe es mal so gemacht:

Java:
String text = "test 1";
text = text.replaceAll("\\s+", "%20");

scheint soweit aber zu funktionieren.
 
Probier es mal mit:

Java:
    public static String encodeString(String value) {
        return URLEncoder.encode(value, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) {
        String s1 = "hall du";
        String s2 = encodeString(s1);
        System.out.println("s2 = " + s2);
    }

Abhängig vom Endpoint, bedarf das '+' gegebenenfalls aber noch einer Behandlung:

Java:
    public static String encodeString(String value) {
        return URLEncoder.encode(value, StandardCharsets.UTF_8).replace("+", "%20");
    }

Alternative wäre Spring framework, das bringt Methoden dafür mit.
 

TheSkyRider

Mitglied
Danke coffee drinker,
deine Methode hat ebenfalls funktioniert.
Eventuell ist die sogar besser als meine oben, weil man den UTF-8 Charset mitverwendet
 

TheSkyRider

Mitglied
Achso ein kleiner Zusatz noch:
bei
Java:
return URLEncoder.encode(value, StandardCharsets.UTF_8).replace("+", "%20");
müssen vor dem Plus noch zwei Backslashes, also so:
Code:
return URLEncoder.encode(value, StandardCharsets.UTF_8).replace("\\+", "%20");
 

Ähnliche Java Themen


Oben