Как добавить незашифрованные параметры QueryParameters в HttpUrl? - PullRequest
0 голосов
/ 04 июня 2019

Для геокодирования адреса с помощью Google Geocoding APIv3 я хочу создать HttpUrl, равный этому: https://maps.googleapis.com/maps/api/geocode/json?address=Gaustraße 200, Worms&key=...&components=postal_code:67547

Закодированный параметр запроса components%3Dpostal_code вызовет предполагаемую фильтрацию для почтового индексапотерпеть неудачу ( см. эту тему ).

Мне нужен знак равенства и двойная точка в / после параметра компонентов URL, а не% 3D и% 3A.

Есть ли способ сделать это с OkHttp3?

Я попытался добавить параметр запроса с помощью методов addQueryParameter и addEncodedQueryParameter

/**
 * Creates a okHttp3-URL for geocoding.
 *
 * @param address    the address that is going to be geocoded
 * @param key        the geocoding api key
 * @param baseUrl    the URL of google´s geocoding API
 * @param postalCode a component filter that restricts result to a given postal code
 * @return an instance of HttpUrl
 */
static HttpUrl createOkHttp3URL(String address, String key, String baseUrl, String postalCode) {
        HttpUrl.Builder urlBuilder;
        urlBuilder = HttpUrl.parse(baseUrl).newBuilder();
        urlBuilder.addQueryParameter("address", address);
        urlBuilder.addQueryParameter("key", key);
        urlBuilder.addEncodedQueryParameter("components=postal_code:", postalCode);
        urlBuilder.addQueryParameter("language", "de");
        return urlBuilder.build();
    }

В обоих случаях, '=' между компонентами и postal_code кодируется, поэтому URL выглядит следующим образом:

https://maps.googleapis.com/maps/api/geocode/json?address=Gaustraße 200, Worms&key=...&components%3Dpostal_code%3A67547&language=de

Как уже говорилось, это приведет к тому, что Google отключит фильтрацию результатов.

...