Как избежать интерполяции строк в параметрах POST Url? - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь отправить следующий параметр (одно имя с несколькими значениями) с одним именем ключа. Также в моем заголовке у меня есть headers.put ("Content-Type", "application / x-www-form-urlencoded");собственность также.

requestData.put("scope", "openid&scope=profile&scope=email");

но на стороне сервера эта строка получает в кодированном формате, как показано ниже:

scope=openid%26scope%3Dprofile%26scope%3Demail

Я хочу, чтобы сервер получил мои параметры в виде scope = openid & scope = profile & scope = email.

Функция запроса:

@Override
public void getParams(Map<String, String> requestData) {

    requestData.put("scope", "openid&scope=profile&scope=email");

}

1 Ответ

0 голосов
/ 28 октября 2019
@Override
public void getParams(Map<String, String> requestData) {
    requestData.put("scope", "openid&scope=profile&scope=email");
}

Это почти наверняка тот случай, когда java.util.Map не та структура данных, которую вы хотите использовать здесь. Поведение, которое вы наблюдаете, является абсолютно правильным, учитывая способ, которым должно работать URL-кодирование карты, и вы не сможете превзойти его, если сделаете что-нибудь умное в методе getParams.

То, что вы хотите, будет чем-то вроде Multiset или Map<String,List<String> с некоторым умным кодом сериализации URI.

Наличие аннотации @Override является плохим признаком - это говорит о том, чточто вы можете быть прикованы наручниками к API, который не поддерживает нужный вам вариант использования. Возможно, вам придется разорвать много существующего кода, чтобы расширить ваше решение для этого случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...